• JavaScript:undefined And null差异


        班吃饭的时候,同事偶然问了一个问题:undefined和null究竟有什么差别?无法回答,回去查阅相关文档,算了有了一个了解,做相关的总结。在開始之前,请看例如以下代码,算是抛出这个问题:

    console.info(undefined == null);    //true
    console.info(undefined === null);   //false

          上述结果能够给我们一个这种理解: undefined和null两个值相等,可是他们含义不同。详细两者有什么差别,先理解下undefined和null在做分析。

    undefined

           undefined类型仅仅有一个值,即特殊的undefined。在使用var声明变量但未对其加以初始化,这个变量的值就是undefined。

    比如:

    //1、声明变量,未指定值
    var var1;
    console.info(typeof varl);      //undefined
    //2、指定值为undefined
    var var2 = undefined;
    console.info(typeof var2);      //undefined

           上面两种写法是等价的,未经初始化的值默认就会取得undefined值。

          Tips:一般而言不须要显示的把一个变量设置为undefined,undefined的主要目的在于比較,ECMA第三版引入这个值正是为了区分空对象指针null和未经初始化的变量

          既然谈到了null,这里在多补充一点,对为初始化的变量运行typeof返回undefined值,对为声明的变量运行typeof也会返回undefined值,例如以下样例:

    var var3;
    console.info(typeof var3);      //undefined
    console.info(typeof var4);      //undefined

          这个结果有逻辑上的合理性,尽管null和undefined在技术角度上有本质差别,可是实际中不可能对两种变量进行操作。在这样的情况下假设我们习惯声明变量就进行初始化的时候,当typeof操作符返回“undefined”值时,我们就知道有变量尚未被声明,而不是尚未初始化。

    null

          null类型也是仅仅有一个值null,从逻辑角度来看,null值表示一个空对象指针,不信?看例如以下代码就知道了:

    var var5 = null;
    console.info(typeof var5);      //object

          所以在变量是用于保存对象时,最后将之初始化为null。能够非常方便的知道变量是否保存了一个对象的引用。

    差别

          分别的了解了这两种类型,到这里似乎有所理解,但又不详细。回到最初抛出的问题,在ECMAScript的原始类型中。是有undefined和null类型的,这两种类型分别相应了属于自己的唯一值undefined和null。undefined实际上是从null派生而来,这就能够解释undefined==null为true了。

          就undefined===null为false分两个方面来理解:

    内存

          非常显然,他们的地址分配不一样,我想着对于有后端基础的同学来说非常easy理解,详细例如以下图:

    QQ截图20141030171514

    用途

           虽然undefined==null为true,可是他们的用途是不一样的。就像前面所述,不管什么情况都没有必要将一个变量值显示的指定为undefined,默认值为undefined。可是默认的规则对null却不适用。由于null表示没有指向对象的引用。

           总的来说。undefined派生于null。他们是“=="的。还有一层面上undefined表示没有赋值的基本数据类型,null表示没有赋值的引用数据种类,他们不可以“===”。


    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    深入理解Java:注解(Annotation)自定义注解入门
    Java基础之理解Annotation
    junit常用注解详细说明
    能判断是电脑端还是手机端的javascript
    Ext.js多文件选择上传,
    StringBuffer类和String类(原文地址 : http://www.cnblogs.com/springcsc/archive/2009/12/03/1616330.html)
    FileItem类的常用方法(关于文件上传的)
    js保留小数点后面几位的方法
    如何将div中的内容设置为空同时还要保留div本身
    使用html中的<input>标签上传多个文件(转)
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4617192.html
Copyright © 2020-2023  润新知