1.数据类型不同
JavaScript(ECMAScript标准)里共有5种基本类型:Undefined, Null, Boolean, Number,String和一种复杂类型Object。可以看到null和undefined分属不同的类型,未初始化定义的值用typeof检测出来是"undefined"(字符串),而null值用typeof检测出来是"object"(字符串)。
2.代表意义不同
undefined:undefined是一个特殊值,表示变量已声明但未初始化时的值。
null:null是一个对象,一个准备用来保存对象,还没有真正保存对象的值。从逻辑角度看,null值表示一个空对象指针,即表示一个对象被定义了,但是值为“空值”。
3.转为数字结果不同
null是一个表示“无”的对象,转为数值时为O;
undefined是一个表示“无”的原始值,转为数值为NaN。
4.undefind和null使用场景不同
undefined表示“缺少值”,即此处应该有一个值,但是还没有定义,典型用法是如下。
(1)如果变量声明了,但没有赋值,它就等于undefined 。
(2)当调用函数时,如果没有提供应该提供的参数,该参数就等于undefined 。
(3)如果对象没有赋值,该属性的值为undefined。
(4)当函数没有返回值时,默认返回undefined。
null表示“ 没有对象”,即此处不应该有值,典型用法是如下。
(1)作为函数的参数,表示该函数的参数不是对象。
(2)作为对象原型链的终点。
接下来我们通过一段示例代码,来演示一下undefined和null的区别和使用方法:
// undefined的示例
var x; // 变量x被声明,但没有被赋值
console.log(x); // 输出 undefined
console.log(typeof x); // 输出 undefined
var obj = {}; // 创建一个空对象
console.log(obj.property); // 输出 undefined
// null的示例
var y = null; // 变量y被声明,并被赋值为null
console.log(y); // 输出 null
console.log(typeof y); // 输出 object
var obj2 = null; // 创建一个空对象
console.log(obj2); // 输出 null
在上面的示例中,变量x被声明了但没有被赋值,因此它的值为undefined。而对象obj中不存在名为property的属性,因此访问obj.property的结果也是undefined。
另一方面,变量y被赋值为null,表示它是一个空值。当使用typeof运算符来检查y的类型时,它将返回object,这是JavaScript的一个历史遗留问题。最后,我们创建一个空对象obj2,并将其赋值为null,这是表示一个空对象的常见做法。