详解JavaScript中的Object.is()与"==="运算符总结


Posted in Javascript onJune 17, 2020

三重相等运算符 === 严格检查2个值是否相同:

1 === 1;  // => true
1 === '1'; // => false
1 === true; // => false

但是,ES2015规范引入了 Object.is(),其行为与严格的相等运算符几乎相同:

Object.is(1, 1);  // => true
Object.is(1, '1'); // => false
Object.is(1, true); // => false

主要问题是:什么时候使用 Object.is() 代替严格的相等性检查?让我们找出答案。

1.严格相等检查操作符

首先,让我们快速回顾一下严格的相等运算符是如何工作的。
当两个值的类型相同且持有相同的值时,严格相等检查运算符的计算结果为 true。
例如,以下原始值是相等的,因为它们是相同的类型且具有相同的值:

1     === 1;     // => true
'abc'   === 'abc';   // => true
true   === true;   // => true
null   === null;   // => true
undefined === undefined; // => true

严格相等运算符不执行类型的强制转换,即使操作符持有合理的相同值,但是不同类型的操作符,它们也不是严格相等的:

1  === '1';    // => false
1  === true;   // => false
null === undefined; // => false

对对象执行严格相等检查时,对象仅与自身严格相等:

const myObject = { prop: 'Value' };
myObject === myObject; // => true

即使2个对象的属性和值完全相同,它们的值也不同:

const myObject1 = { prop: 'Value' };
const myObject2 = { prop: 'Value' };
myObject1 === myObject2; // => false

以上比较方案在 Object.is(valueA,valueB) 中的工作原理完全相同。

严格相等检查和 Object.is() 之间的区别在于,如何处理 NaN 和如何处理负零 -0。

首先,NaN(非数字)并不严格等于任何其他值,即使使用另一个 NaN:

NaN === NaN; // => false
NaN === 1;  // => false

其次,严格相等运算符不能将 -0 与 +0 区分开:

-0 === +0; // => true

严格相等运算符使用严格相等比较算法。http://www.ecma-international.org/ecma-262/7.0/index.html#sec-strict-equality-comparison

2. Object.is()

Object.is(valueA,valueB) 以与严格相等运算符相同的方式检查相等性的参数,但有两个区别。

首先,NaN 等于另一个 NaN 值:

Object.is(NaN, NaN); // => true
Object.is(NaN, 1);  // => false

其次,Object.is() 区分 -0 和 +0:

Object.is(-0, +0); // => false

与严格相等运算符相比,Object.is() 使用相同值比较算法。http://www.ecma-international.org/ecma-262/7.0/index.html#sec-samevalue

总结

在大多数情况下,严格相等运算符是比较值的好方法。

如果你想直接检查 NaN 值或对负零和正零进行更严格的区分,那么 Object.is() 是一个不错的选择。

Object.is() 作为比较值的函数性方法也很有用,例如在函数式编程中。

来源:dmitripavlutin.com,作者:Dmitri Pavlutin,翻译:公众号《前端全栈开发者》

到此这篇关于详解JavaScript中的Object.is()与"==="运算符总结的文章就介绍到这了,更多相关JavaScript中的Object.is()与"==="运算符内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木! 

Javascript 相关文章推荐
js导航菜单(自写)简单大方
Mar 28 Javascript
ExtJS判断IE浏览器类型的方法
Feb 10 Javascript
浅谈nodeName,nodeValue,nodeType,typeof 的区别
Jan 13 Javascript
jQuery实现的向下图文信息滚动效果
May 03 Javascript
AngularJs $parse、$eval和$observe、$watch详解
Sep 21 Javascript
Bootstrap轮播图学习使用
Feb 10 Javascript
详解如何让InstantClick兼容MathJax、百度统计等
Sep 12 Javascript
浅析为什么a="abc" 不等于 a=new String("abc")
Oct 25 Javascript
vue中使用iview自定义验证关键词输入框问题及解决方法
Mar 26 Javascript
微信小程序实现无限滚动列表
May 29 Javascript
详解小程序退出页面时清除定时器
Apr 28 Javascript
vue elementui el-form rules动态验证的实例代码详解
May 23 Javascript
vue-iview动态新增和删除的方法
Jun 17 #Javascript
vue iview实现动态新增和删除
Jun 17 #Javascript
vue如何搭建多页面多系统应用
Jun 17 #Javascript
vue2.0实现列表数据增加和删除
Jun 17 #Javascript
使用next.js开发网址缩短服务的方法
Jun 17 #Javascript
vue实现前端分页完整代码
Jun 17 #Javascript
JS实现网站楼层导航效果代码实例
Jun 16 #Javascript
You might like
PHP下几种删除目录的方法总结
2007/08/19 PHP
php继承的一个应用
2011/09/06 PHP
php递归创建和删除文件夹的代码小结
2012/04/13 PHP
php检测文本的编码
2015/07/26 PHP
PHP实现清除wordpress里恶意代码
2015/10/21 PHP
Yii框架使用魔术方法实现跨文件调用功能示例
2017/05/20 PHP
PHP 计算两个时间段之间交集的天数示例
2019/10/24 PHP
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
js 判断一个元素是否在页面中存在
2012/12/27 Javascript
通过JQuery将DIV的滚动条滚动到指定的位置方便自动定位
2014/05/05 Javascript
JS+CSS实现鼠标滑过时动态翻滚的导航条效果
2015/09/24 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
2017/01/20 Javascript
JS实现简易刻度时钟示例代码
2017/03/11 Javascript
Cpage.js给组件绑定事件的实现代码
2017/08/31 Javascript
jquery树形插件zTree高级使用详解
2019/08/16 jQuery
CountUp.js数字滚动插件使用方法详解
2019/10/17 Javascript
jQuery Raty星级评分插件使用方法实例分析
2019/11/25 jQuery
vue 通过绑定事件获取当前行的id操作
2020/07/27 Javascript
解决vue初始化项目一直停在downloading template的问题
2020/11/09 Javascript
布同 Python中文问题解决方法(总结了多位前人经验,初学者必看)
2011/03/13 Python
Python中.py文件打包成exe可执行文件详解
2017/03/22 Python
Python序列化与反序列化pickle用法实例
2019/11/11 Python
Django中使用MySQL5.5的教程
2019/12/18 Python
利用Python裁切tiff图像且读取tiff,shp文件的实例
2020/03/10 Python
Python利用for循环打印星号三角形的案例
2020/04/12 Python
python 爬取B站原视频的实例代码
2020/09/09 Python
使用html5 canvas创建太空游戏的示例
2014/05/08 HTML / CSS
详解HTML5中的Communication API基本使用方法
2016/01/29 HTML / CSS
Daniel Wellington官方海外旗舰店:丹尼尔惠灵顿DW手表
2018/02/22 全球购物
审计工作个人的自我评价
2013/12/25 职场文书
2014信息技术专业毕业生自我评价
2014/01/17 职场文书
《中国的气候》教学反思
2014/02/23 职场文书
《美丽的彩虹》教学反思
2014/02/25 职场文书
退休教师欢送会主持词
2014/03/31 职场文书
Python 全局空间和局部空间
2022/04/06 Python
SpringBoot中获取profile的方法详解
2022/04/08 Java/Android