【转】解剖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)的属性。请看下面的代码:


? 其中,定义undefined局部变量时,其初始值会是对window.undefined属性值的引用。新定义的局部undefined变 量存在与该函数的作用域上。在随后的比较操作中,JavaScript代码的书写方式没有任何的改变,但比较速度却很快。因为作用域上的变量数量会远远少 于window对象的属性,搜索变量的速度会极大提高。
这就是许多前端JS框架为什么常常要自己定义一个局部undefined变量的原因!
原著:李战(leadzen).杭州-阿里软件 2009-2-18
原址:http://blog.csdn.net/leadzen/archive/2009/02/17/3899392.aspx
【转载请注明作者及出处】