一、Undefined类型只有一个值,即特殊的undefined。在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined,例如:
var message; //message的值为undefined。
一般而言,不存在需要显式地把一个变量设置为undefined值的情况。字面值undefined的主要目的是用于比较,而ECMA-262第3版之前的版本中并没有规定这个值。第3版引入这个值是为了正式区分空对象指针与未经初始化的变量。
不过,包含undefined值的变量与尚未定义的变量还是不一样的。例如:
var message; //这个变量声明之后默认取得了undefined值
alert(age); //age尚未定义,会报错.
对于尚未声明过的变量,只能执行一项操作,即使用typeof操作符检测其数据类型(对未经声明的变量调用delete不会导致错误,但这样做没什么实际意义,而且在严格模式下确实会导致错误)。
即便为初始化的变量会自动被赋予undefined值,但显式地初始化变量依然是明智的选择。如果能做到这一点,那么当typeof操作符返回"undefined"值时,我们就知道被检测的变量还没有被声明,而不是尚未初始化。
二、Null类型
从逻辑角度来看,null值表示一个空对象指针,而这也是使用typeof操作符检测null值时会返回"object"的原因。
如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其他值。这样一来,只要直接检查null值就可以知道相应的变量是否已经保存了一个对象的引用。
无论在什么情况下都没有必要把一个变量的值显式地设置为undefined,可是同样的规则对null却不适用,换句话说,只要意在保存对象的变量还没有真正保存对象,就应该明确地让该变量保存null值。