10分钟了解null和undefined的关系
2024-12-09 11:13:16

简单的面试题,21年做的笔记,现在用上了。

正文

21年常见的面试题,如今问到还真是有点怀念,大多数厂商实际上不会问的太深。

面试回答

  1. 二者不全等
  2. null的类型是对象,undefined的类型是undefined

它们是什么

undefined

undefined代表了一个并不存在的值,很多情况都会产生undefined,比如:

  1. 没有返回语句的函数运行结束,就会返回undefined
  2. 访问数组中不存在的下标和对象不存在的属性
  3. void运算符会返回undefined

undefined是一个全局定义的变量:

1
2
undefined in window  // true
复制代码

null

空引用或者空对象,下面这些情况都会用到null:

  1. 试图获取一个不存在的元素返回一个null值
  2. 通过分配null可以手动的释放对象,便于垃圾回收

它们哪儿相同

undefined和null都不能被设置属性或者取属性

1
2
3
undefined.name  // Uncaught TypeError: Cannot read property 'name' of undefined
null.name // Uncaught TypeError: Cannot read property 'name' of null
复制代码

在条件上下文中,都会被计算成false

1
2
3
4
5
6
7
8
9
if(!undefined){
console.log('show undefined');
}
if(!null) {
console.log('show null')
}
// show undefined
// show null
复制代码

它们哪儿不同

它们是两个不同的类型

我们都知道JavaScript里面基本类型有:string,number,boolean,null,undefined,所以null和undefined是两个完全不同的类型

1
2
3
Object.prototype.toString.call(null)    // [object Null]
Object.prototype.toString.call(undefined) // [object Undefined]
复制代码

typeof操作返回值不同

先看现象:

1
2
3
4
5
6
typeof undefined    // undefined
typeof null // object

console.log(null == undefined) // true
console.log(null === undefined) // false
复制代码

两者类型不同,但是在值这一点上,两者其实是相同的。

其实typeof null返回object是一个遗存的bug,因为第一个版本JavaScript值存在32位的bit中,1-3位是类型标识,而且前三位为000的是object,恰好null表示机器码空指针,在大多数平台上为0x00,所以typeof null就会被误以为是object,而且这个bug到现在也没fix,据说是因为历史代码太多所以被委员会拒绝。

结语

这也算是远古面试题了,虽然远古但是基础,还挺怀念的。

参考资料

原贴链接:【前端工程师手册】null和undefined到底是什么关系?

typeof-null

探索JavaScript中Null和Undefined的深渊