<p>
Null 类型是第二个只有一个值的数据类型,这个特殊的值是 null。从逻辑角度来看, null 值表示一个空对象指针,而这也正是使用 typeof 操作符检测 null 值时会返回"object"的原因,如下面的例子所示:
</p>
<pre>var car = null;
alert(typeof car); // "object"</pre>
<a href="http://www.shouce.ren/study/api/s/8354" target="_blank" class="btn btn-sm btn-success">运行一下</a><br />
<p>
如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为 null 而不是其他值。这样一来,只要直接检查 null 值就可以知道相应的变量是否已经保存了一个对象的引用,如下面的例子所示:
</p>
<pre>if (car != null){
// 对 car 对象执行某些操作
}</pre>
实际上, undefined 值是派生自 null 值的,因此 ECMA-262 规定对它们的相等性测试要返回 true:<br />
<pre>alert(null == undefined); //true</pre>
<a href="http://www.shouce.ren/study/api/s/8355" target="_blank" class="btn btn-sm btn-success">运行一下</a><br />
<p>
这里,位于 null 和 undefined 之间的相等操作符(==)总是返回 true,不过要注意的是,这个操作符出于比较的目的会转换其操作数(本章后面将详细介绍相关内容)。
</p>
<p>
尽管 null 和 undefined 有这样的关系,但它们的用途完全不同。如前所述,无论在什么情况下都没有必要把一个变量的值显式地设置为 undefined,可是同样的规则对 null 却不适用。换句话说,只要意在保存对象的变量还没有真正保存对象,就应该明确地让该变量保存 null 值。这样做不仅可以体现 null 作为空对象指针的惯例,而且也有助于进一步区分 null 和 undefined。
</p>