null表示没有对象,即该处不应该有值。典型用法是:作为函数的参数,表示该函数的参数不是对象。作为对象原型链的终点。undefined表示缺少值,就是此处应该有一个值,但是还没有定义。典型用法是:变量被声明了,但没有赋值时,就等于undefined。
null的字面意思是“空值”,这个值的语义是,希望表示一个对象被人为的重置为空对象,而非一个变量最原始的状态。在内存里的表示就是,栈中的变量没有指向堆中的内存对象。
undefined的字面意思就是未定义的值,这个值的语义是,希望表示一个变量最原始的状态,而非人为操作的结果。这种原始状态会在以下4种场景中出现:
(1)声明了一个变量,但没有赋值
(2)访问对象上不存在的属性
(3)函数定义了形参,但没有传递实参
(4)使用void对表达式求值