在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
是显式地表示空值或不存在的对象。