null
和undefinde
都属于基本类型,它们没有原型,不是对象,但是typeof null
返回的却是object
,这是javascript的bug,但是最新的EScript语言为了兼容型,没对这一bug做修复。
所以使用typeof
判断是否为null
不准确,可以使用Object.prototype.toString.call()
打印具体类型。
Object.prototype.toString.call(null) //"[object Null]" Object.prototype.toString.call(undefined) //"[object Undefined]"
null
的使用场景:
null
通常用作一个空引用或空对象,比如:1.DOM上读取一个不存在的元素会返回null
2.如果需要给一个变量或属性指定不变的值、将它传递给一个函数,或者从一个函数返回null,null都是最好的选择。
3.javascript使用undefined
,而程序员应该使用null
。
4.通过分配null
,有效清除引用,并假设对象没有应用其它代码,指定垃圾收集,确保内存被回收。
5.null
也是一个关键字。
undefined
的使用场景:
1.只声明不初始化的变量都会返回一个
undefined
。
3.函数没有指定返回值会返回一个
undefined
。
4.
void
操作符会返回undefined
。 像Underscore的库使用它作为一个防御式的类型检查,因为它是不可变的,可以在任何上下文依赖返回undefined:
var test= void 0 //undefined test //undefined
5.undefined
是一个预定义的全局变量初始化为undefined值。
'undefined' in window; // true