分类: javascript      标签:类型转换, undefined     

undefined与null的类型转换

// 操作符 `==` 不会自动转换 undefined 和 null
undefined == false // false
undefined == true  // false
null == false      // false
null == true       // false

undefined == 0     // false
null == 0          // false

// 操作符会自动转换其他值为数值
true == 1          // true
true == 2          // false

很少直接用 undefined/null 与布尔值或数字比较,更多的是直接把 undefined/null 本身放到判断条件中。但这种自动转换问题仍然值得我们关注,以免犯下类似的错误。

类似地还要小心,如空串转换成数值时,是 0。其他值转换成数值时,很多时候要经过转换成字符串,但这里还是能找到一些需要小心的:

// 下面值转换成数值
[]          // 0
[5]         // 5
[5,6]       // NaN
['']        // 0
['5']       // 5
['abc']     // NaN
[undefined] // 0
[null]      // 0
[undefined,null] // NaN

// 转换成字符串
[]           // ''
[undefined]  // ''
[null]       // ''
[undefined,null] // ','

基于数组,== 这时可以自动转换:

[undefined] == 0  // true
[undefined] == '' // true
[null] == 0       // true
[null] == ''      // true

总之,null 参与数值计算时可以自动转换为 0,undefined 只能转换为 NaN。== 不能直接自动转换 undefined 和 null,但是 undefined == null 是真值。数组转换成字符串时,作为数组元素的 undefined 和 null 都将被忽略,而数组转换成数字可以看成是基于转换成的字符串再转换为数值。

-EOF-


blog comments powered by Disqus