一、Undefined类型
Undefined 类型只有一个值,即特殊的undefined。在使用var 声明变量,但没有对其初始化时,这个变量的值就是undefined。
var box;PS:我们没有必要显式的给一个变量赋值为undefined,因为没有赋值的变量会隐式的(自动的)赋值为undefined;而undefined 主要的目的是为了用于比较,ECMAScript 第3 版之前并没有引入这个值,引入之后为了正式区分空对象与未经初始化的变量。未初始化的变量与根本不存在的变量(未声明的变量)也是不一样的。
alert(box);
var box;PS:如果typeof box,typeof age 都返回的undefined。从逻辑上思考,他们的值,一个是undefined,一个报错;他们的类型,却都是undefined。所以,我们在定义变量的时候, 尽可能的不要只声明,不赋值。
alert(age); //age is not defined
二、Null类型
Null 类型是一个只有一个值的数据类型,即特殊的值null。它表示一个空对象引用(指针),而typeof 操作符检测null 会返回object。
var box = null;
alert(typeof box);
如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null。这样,当检查null 值就知道是否已经变量是否已经分配了对象引用了。
var box = null;
if (box != null) {
alert('box 对象已存在!');
}
有个要说明的是:undefined 是派生自null 的,因此ECMA-262 规定对它们的相等性测试返回true。
alert(undefined == null);
由于undefined 和null 两个值的比较是相等的,所以,未初始化的变量和赋值为null 的变量会相等。这时,可以采用typeof 变量的类型进行比较。但,建议还是养成编码的规范,不要忘记初始化变量。
var box;
var car = null;
alert(typeof box == typeof car)