在JavaScript中,null 和 undefined 是两个表示“空”或“无值”的特殊值,但它们有不同的用途和含义。以下是它们之间的主要区别:
-
定义和用途:
-
undefined:- 表示一个变量被声明了,但没有被赋值。
- 当访问一个对象的属性或数组的元素时,如果该属性或元素不存在,也会返回
undefined。 - 例如:
let x; console.log(x); // 输出: undefined let obj = {}; console.log(obj.prop); // 输出: undefined
-
null:- 表示一个空值或不存在的对象。
- 它是JavaScript中的一个字面量,用于显式地表示一个变量或属性为“空”或“无”。
- 例如:
let y = null; console.log(y); // 输出: null
-
-
默认值:
- 函数参数如果没有提供,默认值为
undefined。 - 例如:
function foo(a) {console.log(a); // 输出: undefined,如果没有提供参数 } foo();
- 函数参数如果没有提供,默认值为
-
类型转换:
- 在类型转换时,
null会被视为0(在数值上下文中),而undefined会被转换为NaN(在数值上下文中)。 - 例如:
Number(null); // 输出: 0 Number(undefined); // 输出: NaN
- 在类型转换时,
-
严格相等(===)比较:
null与undefined在严格相等比较中不相等。- 例如:
null === undefined; // 输出: false
-
逻辑运算:
- 在布尔上下文中,
null和undefined都会被视为false。 - 例如:
!null; // 输出: true !undefined; // 输出: true
- 在布尔上下文中,
-
JSON 序列化:
JSON.stringify()会将undefined忽略(在对象中),但会抛出错误如果尝试直接序列化undefined。null会被序列化为null。- 例如:
JSON.stringify({a: undefined}); // 输出: "{}" JSON.stringify({b: null}); // 输出: '{"b":null}' JSON.stringify(undefined); // 抛出错误: Converting circular structure to JSON
理解 null 和 undefined 的区别对于编写健壮的JavaScript代码非常重要,特别是在处理变量和属性时。通常,undefined 是默认的未赋值状态,而 null 是显式地表示空值或不存在的对象。
