区别一:是两种不同的数据类型
console.log(typeof undefined); //undefined
console.log(typeof null); //object
区别二:含义不同
null可以代表空对象,看作一个空对象指针;
而undefined则表示空值。
区别三:使用场景不同
null的使用场景:
- 手动设置
- DOM元素获取时没有获取到指定的元素对象,结果为null。
- 正则捕获时没有捕获到指定结果,返回null。
- Object.prototype._proto_的值为null,即对象原型链的终点。
- 定义一个变量,若要当作对象来使用,初始化为null。
undefined的使用场景:
- 若变量只声明未初始化,则变量的值为undefined。
- 对象上不存在的属性,则属性值为undefined。
- 函数形参不传值,则参数值为undefined。
- 函数无显式返回值,则返回undefined。
- 数组中寻找某一项没有找到,则返回undefined。
- JS严格模式下,this指undefined。
- 使用void对表达式求值,结果为undefined。
区别四:用法不同
进行数值转换时,null可以转为0来使用,而undefined则会转为NaN。举一个栗子:
console.log(null + 1); //1
console.log(undefined + 1); //NaN
//转数字
console.log(Number(null)); // 0
console.log(Number(undefined));//NaN