Undefined 类型
Undefined类型只有一个值,即特殊的undefined。在使用var声明变量但未对其进行初始化时,这个变量的值就是undefined,例如:
var message;
console.log(message); //undefined
var message = undefined;
console.log(message); //undefined
在这个例子的第一段中,只声明了变量message,但未对其进行初始化。所以在控制台输出时会得到一个undefined。而第二段代码中我们使用了undefined值显示的初始化了message变量,得到的结果仍然是undefined。但实际上我们没必要这么做的,因为就像第一段代码中,只要是未经初始化的变量默认都会取值undefined。
一般而言,不存在需要显示地把一个变量设置为undefined值的情况。字面值undefined的主要目的是用于比较。不过包含undefined值的变量和尚未定义的变量还是不一样的。看看下面这个例子:
var message; //这个变量声明但未初始化,取得默认值undefined
//var age; //这个变量我们把它注释掉,所以就相当于并没有声明
console.log(message);// undefined
console.log(age); // 报错 age没有被定义
运行上面的代码,第一个console会打印输出undefined,而第二个console则会产生错误,因为变量age根本就没有声明。对于尚未声明过的变量,只能执行一项操作,就是用typeof检查数据类型,这个时候是不会报错的。
然而,令人困惑的是:对于已经声明但未初始化的变量执行typeof操作会返回undefined值,而对尚未声明的变量执行typeof操作,结果同样返回undefined的值,看下面的例子:
var message; //声明变量但未初始化
//var age; //未声明的变量
console.log(typeof message); //undefined
console.log(typeof age); //undefined
结果表明:对于声明未初始化和未声明的变量执行typeof操作都返回了undefined值;其实这个结果也有其逻辑上的合理性,因为虽然这两种变量从技术角度看有着本质的区别,但是实际上无论对哪种变量都不可能执行真正的操作。
tips:
即便未初始化的变量会自动被赋予undefined值,但显示的初始化变量依然是明智的选择,也是墙裂推荐的选择。因为如果能够做到这一点,那么当typeof操作符返回undefined值时,我们就知道被检测的变量还没有被定义,而不是尚未初始化。