JavaScript中的几种数据类型
JavaScript定义了几种数据类型?哪些是原始类型?原始类型和复杂类型的区别是什么?
ECMAScript中有5种简单数据类型(也称为基本数据类型):Undefined,Null,Boolean,Number,String.
其中Boolen,Number,String为原始数据类型,Undefined,Null一般将其看为特殊值。
1种复杂数据类型:Object.
Object本质上是由一组无序的名值对组成的。
ES6中新出了一个Symbol类型。
ECMAScirpt不支持任何创建自定义类型的机制,而所有值最终都将是上述7种数据类型之一。
- Unndefined类型:该类型只有一个值,即特殊的
undefined
。在使用var
声明变量但未对其加以初始化时,这个变量的值就是undefined
。无论在什么情况下都没有必要把一个变量的值显式地设置为undefined
。 - Nunll类型:该类型同样只有一个值,即
null
。从逻辑角度来看,null
表示一个空的之争对象,而这也正式使用typeof
操作符检测null
值时会返回object
的原因。事实上,undefined值是派生自null值的。如下所示:
alert( null == undefined); //true
尽管null
与undefined
有这样的关系,但它们的用途完全不同。只要意在保存对象的变量还没有真正保存对象,就该明确的让该变量保存null
值。这样不仅可以体现null作为空对象指针的惯例,而且也有助于进一步区分null
和undefined
。
- Boolean类型:该类型有两个值:
true
和false
,并且着两个值是区分大小写的。ECMAScript中所有类型的值都有与这两个Boolean值等价的值,这些转换规则对理解流控制语句(如if语句)自动执行相应的Boolean转换非常重要:
数据类型 | 转换为true的值 | 转换为false的值 |
---|---|---|
Boolean | true | false |
String | 任何非空字符串 | " "(空字符串) |
Number | 任何非零数字值(包括无穷大) | 0 和 NAN |
Object | 任何对象 | null |
Undefined | n/a(不适用) | undefined |
- Number类型:最基本的数值字面量格式是十进制整数,整数还可以通过八进制、十六进制来表示,如下写法:
var intNum = 55; 十进制整数
var octalNum1 = 070; 八进制整数——56,第一位必须是 0 然后是八进制数字序列(0-7)
var octalNum2 = 079; 无效的八进制数值,解析为十进制79
var hexNum1 = 0xA; 十六进制整数——10,前两位必须是0x,后跟任何十六进制数字。其中,字母A~F可以大写也可以小写。
var hexNum2 = 0x1f; 十六进制整数——31
在进行算数计算时,所有以八进制和十六进制表示的数值最终都将被转换为十进制数值。
Number类型中也包含了浮点数。所谓浮点数就是该数值中必须包含一个小数点,并且小数点后面必须至少有一个数字,虽然小数点前面可以没有整数,但是不推荐这种写法。
ECMASctipt中通常会将小数点后面带有6个零以上的浮点数值转换为以 e 表示法表示的数值(如0.0000003会被转换成3e-7)。
浮点数值最高精度是17位小数,但在进行算数计算时其精确度远远不如整数。例如:
var a = 0.1;
var b = 0.2;
alert(a+b); //0.30000000000000004
在大多数浏览器中能保存的最小数值为5e-324;最大数值为1.7976931348623157e+308。如果计算结果超出了这两个值,那么这个数值将自动转换为特殊的Infinity值,正无穷为Infinity
,负无穷为-Infinity
。Infinity是不能参与计算的数值,用isFinite()
函数可以测试一个数值是否在最大和最小数值之间,如果在则返回true
。
NaN,即非数值(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。任何涉及到NaN的操作都会返回NaN,并且NaN与任何值都不相等,包括NaN本身。通过isNaN()函数可以确定一个参数是否“不是数值”。
alert(isNaN(NaN)); //true
alert(isNaN(10)); //false(10是一个数值)
alert(isNaN("10")); //false (可以被转换为数值10)
alert(isNaN("blue")); //true (不可以被转换成数值)
alert(isNaN(true)); //false (可以被转换成数值1)
-
String类型:用于表示由零个或多个16位Unicode字符组成的字符序列,即字符串。字符串可以由双引号或单引号表示。但是双引号开头必须双引号结尾,单引号开头单引号结尾。ECMAScript中字符串是不可变的,一旦创建,它们的值不可改变。必须通过销毁—重新填充,才能改变字符串的值。
-
Object类型:Object类型就是一组数据和功能的集合。在ECMAScript中Object类型是所有它的实例的基础。换句话说,Object类型所具有的任何属性和方法也同样存在与更具体的对象中。
-
最新出了个Symbol的数据类型,其意义是生成一个全局唯一的值。
Symbol参考地址