Undefined类型
undefined类型只有一个值即特殊的undefined。在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined,例如:
var message;
alert(message == undefined); //true
这个例子只声明了变量message,但未对其进行初始化。比较这个变量与undefined字面量,结果表明它们是相等的。这个例子与下面的例子是等价的:
var message = undefined;
alert(message == undefined);//true
这个例子使用undefined值显式初始化了变量message。但其实没有必要这样做,因为未经初始化的值默认就会取得undefined值。
一般而言,不存在需要显式地把一个变量设置为undefined值得请客。字面值undefined的主要目的是用于比较。ECMA-262第3版引入这个值是为了正式区分空对象指针与未经初始化的变量。
然而,对未初始化的变量执行typeof操作符会返回undefined值,而对未声明的变量执行typeof操作符同样也会返回undefined值。来看下面的例子:
var message; //这个变量声明之后默认取得了undefined值
//下面这个变量并没有声明
//var age
alert(typeof message); //"undefined"
alert(typeof age); //"undefined"
结果表明,对未初始化和未声明的变量执行typeof操作符都返回了undefined值;这个结果有其逻辑上的合理性。因为虽然这两种变量从技术角度看有本质区别,但实际上无论对哪种变量也不可能执行真正的操作。
即使未初始化的变量会自动被赋予undefined值,但显式地初始化变量依然是明智的选择。如果能够做到这一点,那么当typeof操作符返回“undefined”值时,我们就知道呗检测的变量还没有被声明,而不是尚未初始化。