日期:2014-05-16  浏览次数:20316 次

【转】解剖JavaScript中的null和undefined

?? ?在JavaScript开发中,被人问到:null与undefined到底有啥区别?

??? 一时间不好回答,特别是undefined,因为这涉及到undefined的实现原理。于是,细想之后,写下本文,请各位大侠拍砖。

??? 总所周知:null == undefined

? ? 但是:null !== undefined

??? 那么这两者到底有啥区别呢?

??? 请听俺娓娓道来...

null

? ? 这是一个对象,但是为空。因为是对象,所以 typeof null? 返回 'object' 。

? ? null 是 JavaScript 保留关键字。

? ? null 参与数值运算时其值会自动转换为 0 ,因此,下列表达式计算后会得到正确的数值:

    表达式:123 + null    结果值:123

    表达式:123 * null    结果值:0

undefined

  undefined是全局对象(window)的一个特殊属性,其值是未定义的。但 typeof undefined 返回 'undefined' 。

????? 虽然undefined是有特殊含义的,但它确实是一个属性,而且是全局对象(window)的属性。请看下面的代码:

????alert('undefined'?in?window);???//输出:true

?????
var?anObj?=?{};
???? alert(
'undefined'?in?anObj);????//输出:false

?
从中可以看出,undefined是window对象的一个属性,但却不是anObj对象的一个属性。

  注意:尽管undefined是有特殊含义的属性,但却不是JavaScript的保留关键字。

  undefined参与任何数值计算时,其结果一定是NaN。

  随便说一下,NaN是全局对象(window)的另一个特殊属性,Infinity也是。这些特殊属性都不是JavaScript的保留关键字!