一直以来不是很清楚null和undefined的区别,搜索整理了一下
1、定义上
null:指对象的值未设置,是缺失的模块,可以理解为尚未创建的对象。
undefined:表示缺少值,此处应该有个值,但是还没有定义。
2、属性上
null是一个字面量,不是全局对象的一个属性。
undefined是js在运行时创建的全局变量,是全局对象的一个属性。(当我们使用一个没有定义的变量时,全局作用域会自动创建一个名为undefined的变量,初始值为undefined,undefined是在全局作用域中定义的)
3、布尔运算中
undefined和null都被认为是false
4、用法上的区别
null:
作为函数的参数,表示该函数的参数为空
作为对象原型链的终点:Object.prototype.__proto__ === null
undefined:
变量被声明但是没有赋值
对象的某个属性没有赋值
调用函数时所需要的参数没有提供,该参数就等于undefined
函数没有返回值时,默认返回undefined
5、区别
(1)相等但是不全等: null 和 undefined 都代表着无效的值,所以二者相等,但由于是两种不同的原始数据类型,所以不全等
类型:
typeof undefined //undefined
typeof null //object
typeof null 结果是 object,这是个历史遗留 bug
(2)在数字运算中被转换为number类型的值不同:
null:
//null在进行算术转换时,确定的值为0
let a = 10 + null;
console.log(a); // 10
undefined:
//undefined 得出的结果为 NaN
let b = 10 + undefined;
console.log(b); // NaN