详解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 相关文章推荐
Javascript 获取链接(url)参数的方法
Feb 15 Javascript
js根据给定的日期计算当月有多少天实现思路及代码
Feb 25 Javascript
小结Node.js中非阻塞IO和事件循环
Sep 18 Javascript
js使用for循环与innerHTML获取选中tr下td值
Sep 26 Javascript
JavaScript插件化开发教程 (三)
Jan 27 Javascript
学习使用grunt来打包JavaScript和CSS程序的教程
Jan 04 Javascript
React Native实现进度条弹框的示例代码
Jul 17 Javascript
微信小程序实现轮播图效果
Sep 07 Javascript
微信小程序生成分享海报方法(附带二维码生成)
Mar 29 Javascript
JS+CSS实现炫酷光感效果
Sep 05 Javascript
vue实现日历表格(element-ui)
Sep 24 Javascript
关于React Native使用axios进行网络请求的方法
Aug 02 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+jQuery+MySql实现红蓝(顶踩)投票代码
2015/08/25 PHP
thinkPHP框架动态配置用法实例分析
2018/06/14 PHP
javascript编程起步(第二课)
2007/01/10 Javascript
JavaScript取得鼠标绝对位置程序代码介绍
2012/09/16 Javascript
浅析document.createDocumentFragment()与js效率
2013/07/08 Javascript
JQuery中对Select的option项的添加、删除、取值
2013/08/25 Javascript
js和jquery使按钮失效为不可用状态的方法
2014/01/26 Javascript
jQuery EasyUI之DataGrid使用实例详解
2016/01/04 Javascript
jQuery实现背景弹性滚动的导航效果
2016/06/01 Javascript
JavaScript新增样式规则(推荐)
2016/07/19 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
Vue2.0组件间数据传递示例
2017/03/07 Javascript
JS中将多个逗号替换为一个逗号的实现代码
2017/06/23 Javascript
vue项目环境变量配置的实现方法
2018/10/12 Javascript
JavaScript判断浏览器运行环境的详细方法
2019/06/30 Javascript
jquery-ui 进度条功能示例【测试可用】
2019/07/25 jQuery
基于javascript canvas实现五子棋游戏
2020/07/08 Javascript
Python中用pycurl监控http响应时间脚本分享
2015/02/02 Python
python中set()函数简介及实例解析
2018/01/09 Python
python 将日期戳(五位数时间)转换为标准时间
2019/07/11 Python
Python检查图片是否损坏及图片类型是否正确过程详解
2019/09/30 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
2020/01/08 Python
django ListView的使用 ListView中获取url中的参数值方式
2020/03/27 Python
基于Python的Jenkins的二次开发操作
2020/05/12 Python
实例讲解CSS3中Transform的perspective属性的用法
2016/04/22 HTML / CSS
CSS3中的Media Queries学习笔记
2016/05/23 HTML / CSS
美国潜水装备、水肺潜水和浮潜设备商店:Leisure Pro
2018/08/08 全球购物
编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串
2014/01/07 面试题
生物科学专业个人求职信范文
2013/12/05 职场文书
优质服务口号
2014/06/11 职场文书
三问三解心得体会
2014/09/05 职场文书
2014年中职班主任工作总结
2014/12/16 职场文书
设备技术员岗位职责
2015/04/11 职场文书
2015年学校图书室工作总结
2015/05/19 职场文书
大学毕业谢师宴致辞
2015/07/27 职场文书
关于PostgreSQL JSONB的匹配和交集问题
2021/09/14 PostgreSQL