10分钟了解null和undefined的关系
2024-12-09 11:13:16
简单的面试题,21年做的笔记,现在用上了。
正文
21年常见的面试题,如今问到还真是有点怀念,大多数厂商实际上不会问的太深。
面试回答
- 二者不全等
- null的类型是对象,undefined的类型是undefined
它们是什么
undefined
undefined代表了一个并不存在的值,很多情况都会产生undefined,比如:
- 没有返回语句的函数运行结束,就会返回undefined
- 访问数组中不存在的下标和对象不存在的属性
- void运算符会返回undefined
undefined是一个全局定义的变量:
1 | undefined in window // true |
null
空引用或者空对象,下面这些情况都会用到null:
- 试图获取一个不存在的元素返回一个null值
- 通过分配null可以手动的释放对象,便于垃圾回收
它们哪儿相同
undefined和null都不能被设置属性或者取属性
1 | undefined.name // Uncaught TypeError: Cannot read property 'name' of undefined |
在条件上下文中,都会被计算成false
1 | if(!undefined){ |
它们哪儿不同
它们是两个不同的类型
我们都知道JavaScript里面基本类型有:string,number,boolean,null,undefined,所以null和undefined是两个完全不同的类型
1 | Object.prototype.toString.call(null) // [object Null] |
typeof操作返回值不同
先看现象:
1 | typeof undefined // undefined |
两者类型不同,但是在值这一点上,两者其实是相同的。
其实typeof null返回object是一个遗存的bug,因为第一个版本JavaScript值存在32位的bit中,1-3位是类型标识,而且前三位为000的是object,恰好null表示机器码空指针,在大多数平台上为0x00,所以typeof null就会被误以为是object,而且这个bug到现在也没fix,据说是因为历史代码太多所以被委员会拒绝。
结语
这也算是远古面试题了,虽然远古但是基础,还挺怀念的。
参考资料
原贴链接:【前端工程师手册】null和undefined到底是什么关系?
探索JavaScript中Null和Undefined的深渊