摘要:他们的布尔值都是,说到布尔值为的,通常包括空字符串这五种常见的对象。各自都是孤家寡人,不用拖家带口的,一人吃饱全家不饿。
举个简单的栗子:
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
当你试图去获取一个不存在的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
摘要:是全局对象的一个属性,当声明了一个变量而未初始化时,得到的就是。作为函数的参数,表示该函数的参数不是对象。作为对象原型链的终点。表示缺少值,此处应该有值,但未定义。因此和的值相等而类型不相等。数字运算不相同这是由于约定的不同所决定的。 对于undefined和null我一直知道他们有很多区别,也知道一点关于他们的区别,但却不具体系统,因此总结了一下,主要心得如下: 我们要区分它们,首先...
摘要:数组也是对象简单来说,对象就是一系列属性名值对,即某个属性名对应某个属性值当我们遍历对象时,不在对象中的属性当然不会被访问到。我们知道操作符用于删除对象中某个属性,而中,数组就是对象的一种,数组的索引就是其属性名,对应的项就是属性值。 先说结论吧: 数组的map方法在IE9以下是不支持的,因此需要写一个兼容方法来实现此行为,在实现兼容的时候:必须注意:对于数组中被删除(dele...
摘要:目前,和基本是同义的,只有一些细微的差别。表示没有对象,即该处不应该有值。作为对象原型链的终点。五新增持续更新中一般是意外情况产生的,则是有意为对象赋值来说明这是一个空的对象的返回值是的类型是 摘自阮一峰博客,另附自己的理解分析。 大多数计算机语言,有且仅有一个表示无的值,比如,C语言的NULL,Java语言的null,Python语言的None,Ruby语言的nil。有点奇怪的是,J...
摘要:类型的实例首先要理解的含义是例子的意思,实际上是判断是否是的一个实例。 数据类型深入理解 数据类型分类 基本(值)类型(5种) String:任意字符串 Number:任意的数字 boolean:true/false null:null undefined:undefined 对象(引用)类型(3种) Object:任意对象 Array:一种特别的对象(数值下...
摘要:例如自定义局部变量作用域上的引用比较作用域上的引用比较其中,定义局部变量时,其初始值会是对属性值的引用。新定义的局部变量存在与该函数的作用域上。这就是许多前端框架为什么常常要自己定义一个局部变量的原因 在javascript开发中,开始学习js的时候时常困惑我的就是null和undefined的区别,所以很想总结下我对这两个的理解学习过js的同学都知道: null==undefined...
阅读 2020·2019-08-30 15:52
阅读 2974·2019-08-29 16:09
阅读 1322·2019-08-28 18:30
阅读 2452·2019-08-26 12:24
阅读 1088·2019-08-26 12:12
阅读 2271·2019-08-26 10:45
阅读 564·2019-08-23 17:52
阅读 808·2019-08-23 16:03