JavaScript中的‘空’

334 阅读1分钟

JavaScript 数据类型中有几个特殊的数值,开发过程中可能会经常用到,却常常忽略本身存在的问题

不是值的值(null, undefined)

undefined类型只有一个值,即undefined。

null类型也只有一个值,即null。

他们的名称既是类型也是值。

undefined和null常被用来表示‘空’值或‘不是值’的值。二者之间有细微差别。

  • null 指空值(empty value)
  • undefined 指没有值(missing value) 或者
  • undefined 指从未赋值
  • null 指曾经赋过值,但当前没有值

null 是一个特殊关键字,不是标识符,我们不能将其当作变量来使用和赋值操作。

undefined 却是一个标识符,可以当作变量使用和赋值。

  • 严格模式下
function foo() {
    "use strict";
    var undefined = 2;
    console.log( undefined ); // 2
}
foo();
  • 非严格模式下
function foo() {
    undefined = 2; // 非常糟糕的做法!
}
foo();
function foo() {
    "use strict";
    undefined = 2; // TypeError!
}
foo();

永远不要重新定义undefined

undefined是一个内置标识符(除非被重新定义),它的值是undefined,通过void运算符即可得到该值。

var a = 42;
console.log( void a, a ); // undefined 42

void 并不改变表达式的结果, 只是让表达式不返回值。

我们用 void 0 来获得 undefined(这主要源自 C 语言,当然使用 void true 或其他 void 表达式也是可以的)。void 0、void 1 和 undefined 之间并没有实质上的区别。

摘录自《你不知道的JavaScript(中)》第二章