1. 定义:
- Undefined(未定义): 表示一个变量已经被声明了,但是还没有被赋予任何值。 也就是说,JavaScript 知道这个变量的名字,但是不知道它应该存储什么数据。
- Null(空): 是一种赋值,表示一个变量被故意地赋予了“没有值”的状态。 可以认为它是一个空对象指针,即该变量现在不引用任何对象。
2. 使用场景:
- Undefined:
- 声明了一个变量,但没有给它赋值。例如:
let myVariable;
- 函数调用时,缺少了期望的参数。例如:
function myFunction(arg) { console.log(arg); } myFunction(); // arg 的值为 undefined
- 访问对象中不存在的属性。例如:
const myObject = {}; console.log(myObject.propertyName); // 输出 undefined
- 函数没有明确的返回值时,默认返回
undefined
。例如:function myFunction() { /* 没有 return 语句 */ } console.log(myFunction()); // 输出 undefined
- 声明了一个变量,但没有给它赋值。例如:
- Null:
- 用于表示一个值为空或者不存在。
- 作为函数参数,显式地表示该参数不是一个对象。
- 表示一个对象原型链的终点。
- 释放一个对象,你可以将
null
赋值给它。 - 当你想要明确地表示一个变量是空的。 例如:
let myObject = null; // 明确表示 myObject 当前不指向任何对象
3. 类型:
typeof null
返回 “object”。 这是一个历史遗留问题,属于 JavaScript 的一个 bug。typeof undefined
返回 “undefined”。
4. 转换为数值:
Number(null)
返回 0。Number(undefined)
返回 NaN(Not a Number,非数字)。
5. 相等性:
null == undefined
的结果是 true。 因为 JavaScript 会进行类型转换,将它们视为松散相等。null === undefined
的结果是 false。 因为它们的数据类型不同,严格相等要求类型和值都相同。
简单总结:
undefined
通常意味着“缺少值”,是 JavaScript 默认赋予未赋值变量的值。 null
则意味着“有意为空”,是程序员显式设置的,表示该变量当前不应该有任何值。 通常来说,undefined
是 JavaScript 引擎内部使用的,而 null
更多的是程序员用来表示某个变量的空状态。