它们是什么
undefined
undefined代表了一个并不存在的值,很多情况都会产生undefined,比如:
- 没有返回语句的函数运行结束,就会返回undefined
- 访问数组中不存在的下标和对象不存在的属性
- void运算符会返回undefined
undefined是一个全局定义的变量:
undefined in window // true
null
空引用或者空对象,下面这些情况都会用到null:
- 试图获取一个不存在的元素返回一个null值
- 通过分配null可以手动的释放对象,便于垃圾回收
它们哪儿相同
undefined和null都不能被设置属性或者取属性
undefined.name // Uncaught TypeError: Cannot read property 'name' of undefined
null.name // Uncaught TypeError: Cannot read property 'name' of null
在条件上下文中,都会被计算成false
if(!undefined){
console.log('show undefined');
}
if(!null) {
console.log('show null')
}
// show undefined
// show null
它们哪儿不同
它们是两个不同的类型
我们都知道JavaScript里面基本类型有:string,number,boolean,null,undefined,所以null和undefined是两个完全不同的类型
Object.prototype.toString.call(null) // [object Null]
Object.prototype.toString.call(undefined) // [object Undefined]
typeof操作返回值不同
先看现象:
typeof undefined // undefined
typeof null // object
其实typeof null返回object是一个遗存的bug,因为JavaScript值存在32位的bit中,1-3位是类型标识,而且前三位为000的是object,恰好null表示机器码空指针,在大多数平台上为0x00,所以typeof null就会被误以为是object,而且这个bug到现在也没fix,据说是因为历史代码太多所以被委员会拒绝。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。