你的位置:首页 > Java教程

[Java教程]JS 数据类型


数据类型

JS一共有六种数据类型,其中有五种基本数据类型,分别为Number、String、Boolean、Null、Undefined,和一种复杂数据类型——Object类型。

 

typeof

typeof操作符可以检测给定变量的数据类型;返回值除了number、string、boolean、undefined、object之外,还可以返回function。

注意:null会被返回object;是因为null被认为是一个空的对象引用。

 

Undefined

只有一个特殊值——undefined;使用关键字var声明变量,但并未加以初始化,变量就会默认取得undefined值。

初始化为undefined的变量、未初始化的变量、未声明的变量,执行typeof操作符时都会返回undefined。

但是console.log()未声明的变量会返回错误,可以以此检测变量是未初始化还是未声明。

 

Null

只有一个特殊值——null;从逻辑角度来说,null值表示一个空的对象指针。

无论在什么情况下,都没有必要把一个变量的值显式地设置为undefined;但是,只要意在保存对象的变量还没有真正地保存对象,就应该明确地让该变量保存null值,不仅体现null作为空对象指针的惯例,而且易于区分null和undefined。

《JS权威指南》——通常认为null是Null类型的唯一值,它可以表示数字、字符串和对象是“无值”的。

《JS权威指南》——如果想将null或者undefined赋值给变量或者属性,或者将它们作为参数传入函数,最佳选择是使用null。

小tips:把null赋值给一个变量可以清除变量。

var x = 5;

console.log(x);    //5

x = null;

console.log(x);    //null

 

Boolean

只有两个值,true和false。

其它所有数据类型都可以调用转型函数Boolean(),将其转化为对应的Boolean值。

规则如下:

String:任何非空字符串转换为true;""(空字符串)转化为false。    //即使只有一个空格,也算非空字符串,转换为true。

Number:任何非0数字(包括Infinite)转换为true;0/NaN转换为false。

Object:任何对象转换为true;null转换为false。    //对象、数组、函数,只要是属于Object数据类型的,都转换为true。

Undefined:N/A转换为true;undefined转换为false。

 

Number

JS不区分整数值与浮点数值;JS中的所有数字均用浮点数值表示。

JS接收10进制、8进制、16进制的整数;最终都会被转换为10进制数值进行计算。

8进制以0开头,后跟0~7数字序列,如果数值超出了0~7这个范围,会忽略前导0,,当做10进制进行解析。

console.log(070);    //56

console.log(079);    //79

(注意:JS标准并不支持8进制数字字面量。)

16进制以0x开头,后跟16进制数字;A~F大小写皆可。

console.log(0xCC);    //204

1.浮点数值

保存浮点数值的内存空间是保存整数值的两倍,所以(如果可能)JS会自动将浮点数值转换为整数值。

浮点数值的精度非常高,永远不要测试某个特定值的浮点数值。

var x = 0.1 + 0.2;

console.log(x);    //0.30000000000000004

console.log(x === 0.3);    //false

使用科学计数法保存数值。

语法:[digits][.digits][(E|e)[(+|-)]digits]

var x = 1.233e5;

var y = 1.233e-5;

console.log(x);    //123300

console.log(y);    //0.00001233

2.数值范围

JS能够表示的值是有范围的,大于最大值为Infinite,小于最小值为-Infinite。

如果isFinite()函数返回true,则证明有穷,数值在最大值与最小值之间。

3.NaN

其意为非数值,Not a Number ;表示一个本来要返回数值的操作数未返回数值的情况。

NaN两大特点:任何涉及NaN的操作都会返回NaN;NaN与任何值都不相等,包括NaN本身。

isNaN()函数,任何不能转换为数值的值都会返回true。

isNaN()函数也适用于对象;在基于对象调用isNaN()函数时,会首先调用对象的valueOf()方法,然后确定该方法返回的值是否可以转换为数值;如果不能,则基于这个返回值再调用toString()方法,再测试返回值。

4.数值转换

转型函数Number(),可以用于任何数据类型,规则如下:

如果是Boolean值,true或false分别转换为1或0;

如果是null值,则返回0;

如果是undefined值,则返回NaN;

如果是字符串,则:

如果字符串中只包含数字,则将其转换为10进制数值;数字前可以有 + 或 - ,前导 0 会被省略。    //如果数字以0开头,会被当做8进制数值来解析;如果数字以0x开头,会被当做16进制数值来解析。)

如果字符串中包含有效的浮点数值,则将其转换为对应的浮点数值。

如果字符串是空的(不包含任何字符,可以是空格),则将其转换为0。

如果字符串中包含除上述格式之外的字符,则将其转换为NaN。

如果是对象。则调用对象的valueOf()方法,然后依照前述规则转换返回的值;如果结果是NaN,则调用函数的toString()方法,然后再用前述规则转换返回的字符串值。

 

parseInt()函数对字符串的解析规则:

在转换字符串时,忽略字符串前面的空格,直到找到第一个非空格字符;

如果第一个字符不是数字或者 + - ,就会返回NaN;也就是说,用parseInt()转换空字符串会返回NaN。

如果第一个字符是数字字符,则会继续解析第二个字符,直到遇到非数字字符(小数点号属于非数字字符)。

parseInt()方法能够识别8进制与16进制的数字,但在转换时可能会存在误解,可以给parseInt()方法传递第二个参数,明确需要转换的数字的格式。

console.log(parseInt("115",10));    //"115"这个字符串里面的有效数字字符是10进制格式,输出结果为118。

console.log(parseInt("0x115",16));    //277

 

String

字符串必须加引号,单引号或双引号皆可。

1.字符字面量,也叫转义序列。

\n 换行

\t 水平制表

\v 垂直制表

\b 退格

\r 回车

\f 换页

\\ 反斜线

\' 单引号或撇号

\" 双引号

\xnn 以16进制代码nn表示的一个Latin-1字符

\unnnn 以16进制代码表示的一个Unicode字符

2.字符串的特点

JS中的字符串是不可变的,一旦创建,它们的值就不能改变;要改变某个变量中保存的字符串,首先销毁原来的字符串,然后再用一个新的字符串填充该变量。

事实上,基本类型值都是不可变的;引用类型值是可变的。

3.字符串转换

调用任何数据类型都有的String()转型函数,规则如下:

如果值有toString()方法,则调用该方法,并返回相应的结果。

如果值是null,返回"null"。

如果值是undefined,返回"undefined"。

除了Null、Undefined数据类型之外,Number、Boolean、String、Object数据类型都有toString()方法;这个方法返回相应值的字符串表现。

调用数值的toString()方法时可以传递参数,指定输出的数值类型(10进制或其它),默认为10进制。

var x = 118;

console.log(x.toString(10));    //将数值118转换为字符串,以10进制格式输出,其结果为"118"。

console.log(x.toString(16));    //"76"

 

Object

JS中的对象其实是一组数据和功能的集合。

创建Object类型的实例,并为其添加属性和方法,就可以创建自定义对象。

在JS中,Object类型是所有它的实例的基础,即Object所具有的属性和方法也同样存在于更具体的实例中。

Object的每个实例都具有下列属性和方法:

constructor

hasOwnProperty(propertyName)

isPrototypeOf(object)

propertyIsNumerable(propertyName)

toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。

toString():返回对象的字符串表示。

valueOf():返回对象的字符串、数值、布尔值表示,通常与toString()方法的返回值相同。

注意:BOM、DOM对象属于宿主对象,由宿主实现和提供定义,可能会也可能不会继承Object。