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理解,详细例如以下图:

用途
虽然undefined==null为true,可是他们的用途是不一样的。就像前面所述,不管什么情况都没有必要将一个变量值显示的指定为undefined,默认值为undefined。可是默认的规则对null却不适用。由于null表示没有指向对象的引用。
总的来说。undefined派生于null。他们是“=="的。还有一层面上undefined表示没有赋值的基本数据类型,null表示没有赋值的引用数据种类,他们不可以“===”。
版权声明:本文博客原创文章。博客,未经同意,不得转载。
JavaScript:undefined And null差异的更多相关文章
- Javascript undefined 和 null
Javascript undefined 和 null 虽然 Javascript 一切皆对象,但是类型还是有区别的. undefined 表示 未定义的数据类型. null 表示空对象. 在判断时没 ...
- Javascript中的null和 undefined
Javascript Undefined vs NULL Many a times we often get confused on whats the difference between UNDE ...
- Javascript中的undefined、null、""、0值和false的区别总结
在程序语言中定义的各种各样的数据类型中,我们都会为其定义一个"空值"或"假值",比如对象类型的空值null,.NET Framework中数据库字段的空值DBN ...
- JavaScript中undefined与null的区别
通常情况下, 当我们试图访问某个不存在的或者没有赋值的变量时,就会得到一个undefined值.Javascript会自动将声明是没有进行初始化的变量设为undifined. 如果一个变量根本不存在会 ...
- JavaScript数据类型 typeof, null, 和 undefined
JavaScript 数据类型 在 JavaScript 中有 5 种不同的数据类型: string number boolean object function 3 种对象类型: Object Da ...
- javascript类型系统——undefined和null
× 目录 [1]原因 [2]undefined [3]null 前面的话 一般的程序语言,表示空的只有null,但javascript的设计者Brendan Eich却设计了一个undefined,这 ...
- 【温故而知新-Javascript】比较 undefined 和 null 值
JavaScript 中有两个特数值: undefined和null,在比较它们的时候需要留心.在读取未赋值的变量或试图读取对象没有的属性时得到的就是 undefined 值. <!DOCTYP ...
- 区别Javascript中的Null与Undefined
在JavaScript中存在这样两种原始类型:Null与Undefined.这两种类型常常会使JavaScript的开发人员产生疑惑,在什么时候是Null,什么时候又是Undefined? Undef ...
- 【转】JavaScript中undefined与null的区别
通常情况下, 当我们试图访问某个不存在的或者没有赋值的变量时,就会得到一个undefined值.Javascript会自动将声明是没有进行初始化的变量设为undifined. 如果一个变量根本不存在会 ...
随机推荐
- ViewChild与ContentChild的联系和区别
原文 https://www.jianshu.com/p/5ab619e576ea 大纲 1.认识ViewChild 2.认识ContentChild 3.ViewChild与ContentChild ...
- [RxJS] Convert RxJS Subjects to Observables
The use of RxJS Subjects is common, but not without problems. In this lesson we will see how they ca ...
- [Recompose] Transform Props using Recompose --mapProps
Learn how to use the 'mapProps' higher-order component to modify an existing component’s API (its pr ...
- ios开发runtime学习三:动态添加方法(实际应用少,面试)
#import "ViewController.h" #import "Person.h" /* 1: Runtime(动态添加方法):OC都是懒加载机制,只要 ...
- linux java配置环境变量
export JAVA_HOME=/alidata/server/java/jdk1.8.0_65export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME ...
- crx
https://www.crx4chrome.com/down/770/crx/ Downloading crx file for Linkclump The Linkclump crx file y ...
- [转载]剥析surging的架构思想
1.前言 2.通信机制 2.1 简介 在单体应用中,模块之间的调用通信通过引用加载方法或者函数来实现,但是单体应用最终都会因为团队壮大,项目模块的扩展和部署等出现难以维护的问题.随着业务需求 ...
- CentOS 7开放端口和关闭防火墙
开放端口 永久的开放需要的端口 sudo firewall-cmd --zone=public --add-port=3000/tcp --permanent sudo firewall-cmd -- ...
- [SCSS] Reuse Styles with the SCSS @mixin Directive
Copy/pasting the same code is redundant and updating copy/pasted code slows development velocity. Mi ...
- html5-7 html5语义标签和视频
html5-7 html5语义标签和视频 一.总结 一句话总结:设计网站的时候要兼顾早期浏览器的话,最新技术要缓着用,自己可以先尝试. 1.html5所有标签共有属性有哪四种? 1.id2.clas ...