JavaScript中的类型
值的类型
- null
只要变量要保存对象,而当时又没有哪个对象可保存,就要用 null 来填充该变量。这样就可以保持 null 是空对象指针的语义(typeof null == "object"
),并进一步将其与undefined 区分开来 - undefined
已在作用域中声明但还没有赋值的变量,是undefined
。相反,还没有在作用域中声明过的变量,是undeclared
的, 如这样的报错ReferenceError: b is not defined
意思是 b 是undeclared
, 没有声明 - boolean
布尔值虽然只有两个但是所有其他 ECMAScript 类型的值都有相应布尔值的等价形式。可以使用 Boolean() 转型函数,将其他类型的值转换为布尔值。 所以对if等控制流语句的时候会自动转换为布尔值 - number
- symbol
- object
- string
typeof
typeof 是一个操作符而不是函数
任何情况下为对未声明的标识(undeclare
)符进行操作都会报错,唯独可以使用 typeof 操作符, 返回的是undefined
typeof null === "object"
强制类型转换
在JavaScript中许多情况下都会发生强制类型转换, 如在使用==
就会发生
规则如下:
ToString
-
基本类型值的字符串化规则为:null 转换为"null",undefined 转换为"undefined",true 转换为"true"。数字的字符串化则遵循通用规则
-
对普通对象来说,除非自行定义,否则toString()(Object.prototype.toString())返回内部属性[[Class]] 的值,如普通对象的[[Class]],都是[object object];
判断一个变量是对象还是数组可以使用x.toString()方法,如返回的是[object Array]这就代表数组
-
数组的默认toString() 方法经过了重新定义,将所有单元字符串化以后再用"," 连接起来:
var a = [1,2,3];
a.toString(); // "1,2,3"
- JSON
ToNumber
true 转换为1,false 转换为 0。undefined 转换为 NaN,null 转换为0。
对象(包括数组)会首先被转换为相应的基本类型值,如果返回的是非数字的基本类型值,则再遵循以上规则将其强制转换为数字。
ToBoolean
以下这些是假值:
• undefined
• null
• false
• +0、-0 和NaN
• “”