班吃饭的时候,同事偶然问了一个问题: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理解,详细例如以下图:

用途

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

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

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

JavaScript:undefined And null差异的更多相关文章

  1. Javascript undefined 和 null

    Javascript undefined 和 null 虽然 Javascript 一切皆对象,但是类型还是有区别的. undefined 表示 未定义的数据类型. null 表示空对象. 在判断时没 ...

  2. Javascript中的null和 undefined

    Javascript Undefined vs NULL Many a times we often get confused on whats the difference between UNDE ...

  3. Javascript中的undefined、null、""、0值和false的区别总结

    在程序语言中定义的各种各样的数据类型中,我们都会为其定义一个"空值"或"假值",比如对象类型的空值null,.NET Framework中数据库字段的空值DBN ...

  4. JavaScript中undefined与null的区别

    通常情况下, 当我们试图访问某个不存在的或者没有赋值的变量时,就会得到一个undefined值.Javascript会自动将声明是没有进行初始化的变量设为undifined. 如果一个变量根本不存在会 ...

  5. JavaScript数据类型 typeof, null, 和 undefined

    JavaScript 数据类型 在 JavaScript 中有 5 种不同的数据类型: string number boolean object function 3 种对象类型: Object Da ...

  6. javascript类型系统——undefined和null

    × 目录 [1]原因 [2]undefined [3]null 前面的话 一般的程序语言,表示空的只有null,但javascript的设计者Brendan Eich却设计了一个undefined,这 ...

  7. 【温故而知新-Javascript】比较 undefined 和 null 值

    JavaScript 中有两个特数值: undefined和null,在比较它们的时候需要留心.在读取未赋值的变量或试图读取对象没有的属性时得到的就是 undefined 值. <!DOCTYP ...

  8. 区别Javascript中的Null与Undefined

    在JavaScript中存在这样两种原始类型:Null与Undefined.这两种类型常常会使JavaScript的开发人员产生疑惑,在什么时候是Null,什么时候又是Undefined? Undef ...

  9. 【转】JavaScript中undefined与null的区别

    通常情况下, 当我们试图访问某个不存在的或者没有赋值的变量时,就会得到一个undefined值.Javascript会自动将声明是没有进行初始化的变量设为undifined. 如果一个变量根本不存在会 ...

随机推荐

  1. 具体解释https是怎样确保安全的

    Https 介绍 什么是Https HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer).是以安全为目标的HTTP通道,简单讲是 ...

  2. Selector API用法

    java.nio.channels 类 Selector java.lang.Object java.nio.channels.Selector 直接已知子类: AbstractSelector pu ...

  3. Android 节日短信送祝福(功能篇:1-数据库操作类与自定义ContentProvider)

    首先,还是展示一下部分目录结构:  在节日短信送祝福的功能实现方面,为了能够方便直观展示实现过程,小编我以Java文件为基础,一个一个来展示,免得到时候这个java文件写点,一下又跳到另外一个java ...

  4. 【34.14%】【BZOJ 3110】 [Zjoi2013]K大数查询

    Time Limit: 20 Sec Memory Limit: 512 MB Submit: 5375 Solved: 1835 [Submit][Status][Discuss] Descript ...

  5. 【76.57%】【codeforces 721A】One-dimensional Japanese Crossword

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  6. Ajax的get、post和ajax提交

    JQuery.get(url,[data],[callback],[type]) []里面的参数是可选的,不是必填的. [data]:带发送的key/value数据. [callback]:载入成功时 ...

  7. 编辑器sublime、终端运行python

    sublime编辑器 Sublime Text 是一个代码编辑器(Sublime Text 2是收费软件,但可以无限期试用) Sublime Text是由程序员Jon Skinner于2008年1月份 ...

  8. php的标准输入与输出是什么?

    php的标准输入与输出是什么? 一.总结 php的标准输入与输出(STDIN是一个文件句柄,等同于fopen("php://stdin", 'r')) 1.STDIN是一个文件句柄 ...

  9. 从0到1打造直播 App(直播流程介绍整理 <mark><转>)

    注明:原创 2016-10-27 李智文 腾讯Bugly 概要 分享内容: 互联网内容载体变迁历程,文字——图片/声音——视频——VR/AR——……..从直播1.0秀场时代(YY),2.0游戏直播(斗 ...

  10. DOM 的classList 属性

    1.添加1个或多个class add(class1, class2, ...) 2.移除class remove(class1, class2, ...) 3.判断指定的类名是否存在 contains ...