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 之间并没有实质上的区别。