资讯专栏INFORMATION COLUMN

我所理解的JavaScript中 undefined与null的区别

sf190404 / 932人阅读

摘要:他们的布尔值都是,说到布尔值为的,通常包括空字符串这五种常见的对象。各自都是孤家寡人,不用拖家带口的,一人吃饱全家不饿。

举个简单的栗子:

A和B两个人肚子都很饿,要去吃饭。A已打电话到饭店预约位置,B则打算下班后考察下再做决定。对于饭店来说,A基本上就是他的客户了,只不过还没见到人来,定为null(毕竟交易还没产生),而对饭店来说,B是谁啊,他们根本没听到过这个人,为undefined

然而,概念还是念叨念叨的

从字面上理解:undefined 不明确的,不知道的,例如var a;我们声明了一个变量但是没有给定初始值,但是这个a代表着啥,boolean? string? number? object? function? 都有可能。而 var a = null;的话,则直接声明了a是有的,但是它的值是空的,没有的,如果把他们同时跟一个数值相加减,也正解释了为啥 3+null = 0 而 3+undefined得到的结果是NaN了。

这俩货是一堆好兄弟,相同而又不同。我们都知道JavaScript几个基本上数据类型:

Boolean、Null Undefined String Number Symbol(ES6新增),这俩货占据两席位置,分量如此重,不得不说,不得不重视起来他们啊。

Undefined 其实代表的是不存在的值,Null是字面量同时也是语言中的关键词,表示无法识别的对象值。他们都没有属性和方法,也不能给其属性赋值。他们的布尔值都是false,说到布尔值为false的,通常包括 NaN 、 0、空字符串、Null 、Undefined 这五种常见的对象。他们之间的关系,可以这样总结:

Null  == 0           //false
Undefined == 0       //false
undefined == ""      //false
null == ""           //false
null == NaN          //false
undefined  == NaN    //false
undefined == null    //true
undefined === null   //false

null 是一个特殊的“对象”,相当于一个空对象的预期。而undefined就是“未定义”,没有。实际中更加推荐使用null,对他们执行typeof分别是

typeof undefined     //undefined
typeof null          //null
相似之处

二者是不可变的,都没有自己的属性和方法,如果你试图给他们增加方法或者属性,都会产生类型错误。各自都是孤家寡人,不用拖家带口的,一人吃饱全家不饿。都是“空”的东西

不同点

“类型”不同,undefined代表了一个意想不到的没有的值,null是预期没有值的代表,至于如何区分他们,下文有介绍

何种情况下会产生undefined呢?

当声明一个变量的时候,比如 var a; //undefined
访问不存在的对象的时候 var obj = {a:1}; var c = obj.c; //undefined
当数组中的索引不存在的时候 var arr = [1,2,3];arr[5]; //undefined
定义一个function,当没有返回值的时候,返回的也是 undefined

何种情况下会产生null呢?

当你试图去获取一个不存在的DOM的时候会返回null
程序猿自己return null

说了这么多,那么问题来了,如何区分一个变量究竟是null还是undefined呢?下面为大家提供一个方法以示区分:

Object.prototype.toString.apply(null)   //  [object Null]
Object.prototype.toString.apply(undefined)  //  [object Undefined]
做一个延伸(别问我为啥去做这个操作,因为我是神经病)

如果我分别用一个Number String 分别跟 undefined null做加减运算,会产生什么操作呢?

5 + null               // 5
5 + undefined          //  NaN
"5" + null             // "5null"
"5" + undefined        // "5undefined"
"aa" + undefined       // "aaundefined"
"aa" + null            // "aanull"
"aa" * null            // NaN
"aa" * undefined       // NaN
题外话:

将我们需要判断类型的东西通过对象的原型toString转换为字符串,简直就是神操作,可以狠轻松的判断很多类型,例如

Object.prototype.toString.call({})              //  [object Object]   
Object.prototype.toString.call([])              //  [object Array]   
Object.prototype.toString.call(function d(){})  //  [object Function]   
Object.prototype.toString.call(123)             //  [object Number]
Object.prototype.toString.call("123")           //  [object String]
Object.prototype.toString.call(Symbol())        //  [object Symbol]

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/92759.html

相关文章

  • 我所知道JavaScriptundefinednull区别

    摘要:是全局对象的一个属性,当声明了一个变量而未初始化时,得到的就是。作为函数的参数,表示该函数的参数不是对象。作为对象原型链的终点。表示缺少值,此处应该有值,但未定义。因此和的值相等而类型不相等。数字运算不相同这是由于约定的不同所决定的。 对于undefined和null我一直知道他们有很多区别,也知道一点关于他们的区别,但却不具体系统,因此总结了一下,主要心得如下: 我们要区分它们,首先...

    hatlonely 评论0 收藏0
  • JavaScript“数组也是对象”

    摘要:数组也是对象简单来说,对象就是一系列属性名值对,即某个属性名对应某个属性值当我们遍历对象时,不在对象中的属性当然不会被访问到。我们知道操作符用于删除对象中某个属性,而中,数组就是对象的一种,数组的索引就是其属性名,对应的项就是属性值。 先说结论吧: 数组的map方法在IE9以下是不支持的,因此需要写一个兼容方法来实现此行为,在实现兼容的时候:必须注意:对于数组中被删除(dele...

    Sike 评论0 收藏0
  • undefinednull区别

    摘要:目前,和基本是同义的,只有一些细微的差别。表示没有对象,即该处不应该有值。作为对象原型链的终点。五新增持续更新中一般是意外情况产生的,则是有意为对象赋值来说明这是一个空的对象的返回值是的类型是 摘自阮一峰博客,另附自己的理解分析。 大多数计算机语言,有且仅有一个表示无的值,比如,C语言的NULL,Java语言的null,Python语言的None,Ruby语言的nil。有点奇怪的是,J...

    defcon 评论0 收藏0
  • 【1】JavaScript 基础深入——数据类型深入理解总结

    摘要:类型的实例首先要理解的含义是例子的意思,实际上是判断是否是的一个实例。 数据类型深入理解 数据类型分类 基本(值)类型(5种) String:任意字符串 Number:任意的数字 boolean:true/false null:null undefined:undefined 对象(引用)类型(3种) Object:任意对象 Array:一种特别的对象(数值下...

    since1986 评论0 收藏0
  • JS基础之undefinednull区别分析

    摘要:例如自定义局部变量作用域上的引用比较作用域上的引用比较其中,定义局部变量时,其初始值会是对属性值的引用。新定义的局部变量存在与该函数的作用域上。这就是许多前端框架为什么常常要自己定义一个局部变量的原因 在javascript开发中,开始学习js的时候时常困惑我的就是null和undefined的区别,所以很想总结下我对这两个的理解学习过js的同学都知道: null==undefined...

    zhigoo 评论0 收藏0

发表评论

0条评论

sf190404

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<