班吃饭的时候,同事偶然问了一个问题: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表示没有赋值的引用数据种类,他们不可以“===”。

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

转载于:https://www.cnblogs.com/gcczhongduan/p/4617192.html

JavaScript:undefined And null差异相关推荐

  1. 一元流量参数为null_了解JavaScript中null和undefined之间的差异和相似之处

    干货技术→JavaScript 乍一看,null和undefined看起来可能相同,但它们远非如此.本文将探讨JavaScript中null和undefined之间的差异和相似之处. 如果你对编程感兴 ...

  2. 是否有标准函数检查JavaScript中的null,undefined或空白变量?

    是否有通用的JavaScript函数可检查变量是否具有值并确保其undefined或为null ? 我有以下代码,但是不确定是否能涵盖所有情况: function isEmpty(val){retur ...

  3. javascript中not defined、undefined、null以及NaN的区别

    [ 前言 ] 从踏入IT行业开始,我就发现技术人员写博客很有必要.如果不写博客,时间久了就像好比天天在外面建房子的人,没有一个自己的房子一样.不管学习紧不紧,工作忙不忙,多动手进行梳理总结,一方面是为 ...

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

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

  5. html js布尔值怎么定义,JavaScript基本类型值-Undefined、Null、Boolean

    大致介绍 ECMAScript中有5中简单的数据类型(也称为基本数据类型):Undefined.Null.Boolean.Number.String. Undefined Undefined时全局变量 ...

  6. Javascript中的null、undefined、NaN

    1.判断彼此是否相等 function btnClick(){alert(null == null);//truealert(undefined==undefined);//truealert(NaN ...

  7. Javascript数据类型:变量与数据类型 数字型Number 字符串型String 布尔型Boolean Undefined和Null 检测变量typeof 数据类型转换 标识符 关键字 保留字

    数据类型 一.数据类型意义 二.变量与数据类型 三.简单数据类型 1.数字型 Number 2.字符串型 String 3.布尔型 Boolean 4.未定义数据类型 Undefined 5.空值 N ...

  8. 是否有标准函数来检查 JavaScript 中的 null、未定义或空白变量?

    问: 是否有一个通用的 JavaScript 函数来检查变量是否具有值并确保它不是 undefined 或 null?我有这段代码,但我不确定它是否涵盖所有情况: function isEmpty(v ...

  9. undefined 和 null 有什么区别?

    在理解undefined和null之间的差异之前,我们先来看看它们的相似类. 它们属于 JavaScript 的 7 种基本类型. let primitiveTypes = ['string','nu ...

最新文章

  1. 子程序与中断程序的异同_专业解读PLC编程中断的原理和用法
  2. Windows Mobile和Wince下使用TinyXML进行Native C++的开发
  3. 什么是Mockito Extra接口?
  4. 【Ant Design Vue】之layout布局
  5. iphone个系列尺寸_iPhone“立体边框”壁纸来了,拥有3D效果
  6. python测控_基于RN8302和Python的电能测控系统设计
  7. tcl之变量-简单变量
  8. 自定义view——环形进度条,带progress值
  9. 【QT】基于HTTP通信的天气查询的实现
  10. 鸟哥的Linux私房菜-服务器架设篇
  11. 中美线径对照表_中国线径与英美德线规对照表
  12. pytorch入门——构建神经网络
  13. 如何使用远程控制软件并将用途最大化?4款国内外优质应用测评解析
  14. STEP 7 MicroWin SP9 帮助文档修复
  15. HTML网页设计制作大作业 - 绿色环境保护HTML5网站模板(4个页面)
  16. quicktime不能成功安装
  17. Safari浏览器直接安装ipa文件
  18. 简单实现你想数字电脑猜的小游戏
  19. Leetcode_121_Best Time to Buy and Sell Stock
  20. uni-app - 监听用户滚动屏幕开始与结束(解决方案)

热门文章

  1. hbase 学习(十四)Facebook针对hbase的优化方案分析
  2. oracle默认初始化用户名密码和密码修改
  3. Linux压缩解压缩命令
  4. Tomcat 7.0 servlet @WebServlet
  5. What is Proguard?
  6. 关于《蜗居》的一点想法
  7. AccountManagment
  8. Service基本组成 (一)
  9. ORA-12519, TNS:no appropriate service handler found
  10. C++读取numpy数据二进制文件