undefined与null

2016-07-13  本文已影响0人  伍纯胥

1.Undefined


Undefined 类型只有一个值,即undefined。在使用var 声明变量但未对其初始化时,这个变量的值就是undefined。例如:

    var word;
    console.log(word == undefined); //true

这个例子只声明了变量,但未对其进行初始化。比较这个变量与undefined 字面量,结果表明它们是相等的。

不过,包含undefined 值的变量与尚未定义的变量还是不一样的。看看下面这个例子:

    var message;              // 这个变量声明之后默认取得了undefined 值

    // var hello;               //这个变量并没有声明

    console.log(word);     // "undefined"

    console.log(hello);    // 产生错误

运行以上代码,第一个控制台会输出变量word的值,即"undefined"。而第二个输出——由于传递给console.log()函数的是尚未声明的变量hello——则会导致一个错误。

然而,对未初始化的变量执行typeof 操作符会返回undefined 值,而对未声明的变量执行typeof 操作符同样也会返回undefined 值。

例如:

    var word;                                      // 这个变量声明之后默认取得了undefined 值

    // var hello;                                  // 这个变量并没有声明

    console.log(typeof word);            // "undefined"

    console.log(typeof hello);           // "undefined"

2.Null


Null 类型也只有一个值的数据类型,这个值是null。从逻辑角度来看,null 值表示指向一个空对象,而这也正是使用typeof 操作符检测null 值时会返回"object"的原因,如下面的例子所示:

    var car = null;
    console.log(typeof car); // "object"

如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null 而不是其他值。这样一来,只要直接检查null 值就可以知道相应的变量是否已经保存了一个对象的引用,如下面的例子所示:

    if (car != null){                     // 对car 对象执行某些操作
    }
    alert(null == undefined);    //true

3.Null与Undefined的区别


这里,null = undefined 总是返回true,不过要注意的是,这个操作符出于比较的目的引擎会隐式转换,实际上,undefined 值是派生自null 值的①。

即使null == undefined 为true,但它们是两种完全不同的数据类型,同时它们的作用也不尽相同。我们没有必要为一个变量设置为undefined,但是很多情形下我们会对个一个变量赋值为null,表示为空。即意在保存对象的变量还没有真正保存对象,就应该明确地让该变量保存null 值。这样做不仅可以体现null 作为引用空对象习惯,也区分null 和undefined。

①.ECMA-262 规定对它们的相等性测试要返回true 。

上一篇 下一篇

猜你喜欢

热点阅读