1.相似性
null与undefined都表示无。转化为布尔值时都是false,所以在‘==’判断时为true。
null == undefined // true
Boolean(null) // true
Boolean(undefined). // true
Number(null) // 0
Number(undefined) // NaN
typeof null // Object,这是个bug-_-
typeof undefined // undefined
2.null 和 undefined在现代JS语义里面是有明确区别的
- null 表示一个值被定义了,定义为“空值”;
- undefined 表示根本不存在定义。
所以设置一个值为 null 是合理的,如obj.aaa = null;
但设置一个值为 undefined 是不合理的. 应使用delete obj.aaa;
3.目前的用法
null:
- 作为对象原型链的终点。
- 一般用于主动释放指向对象的引用。如:当使用完一个比较大的对象,需要对其进行释放内存时,设置为 null。
undefined:
- 变量被声明了,但没有赋值时,就等于undefined。
- 调用函数时,应该提供的参数没有提供,该参数等于undefined。
- 对象没有赋值的属性,该属性的值为undefined。
- 函数没有返回值时,默认返回undefined。
看到的一句比较好的总结:undefined是js用的,而null是给我们用的。
参考文档:
1.https://www.ruanyifeng.com/blog/2014/03/undefined-vs-null.html