详解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实现本地图片预览的方法
Jul 31 Javascript
jQuery实现伪分页的方法分享
Feb 17 Javascript
jquery判断input值不为空的方法
Jun 05 Javascript
PhotoSwipe异步动态加载图片方法
Aug 25 Javascript
Vue.js每天必学之指令系统与自定义指令
Sep 07 Javascript
jquery插件bootstrapValidator表单验证详解
Dec 15 Javascript
easyui关于validatebox实现多重规则验证的方法(必看)
Apr 12 Javascript
Javascript实现信息滚动效果
May 18 Javascript
浅析Angular19 自定义表单控件
Jan 31 Javascript
微信小程序实现简单评论功能
Nov 28 Javascript
Vue+Express实现登录注销功能的实例代码
May 05 Javascript
JavaScript简单编程实例学习
Feb 14 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
使用phpQuery采集网页的方法
2013/11/13 PHP
php实现邮件发送并带有附件
2014/01/24 PHP
PHP5.4起内置web服务器使用方法
2016/08/09 PHP
JavaScript 权威指南(第四版) 读书笔记
2009/08/11 Javascript
Jquery操作js数组及对象示例代码
2014/05/11 Javascript
Javascript毫秒数用法实例
2015/02/05 Javascript
Angular2中Bootstrap界面库ng-bootstrap详解
2016/10/18 Javascript
jQuery双向列表选择器DIV模拟版
2016/11/01 Javascript
vue-router+vuex addRoutes实现路由动态加载及菜单动态加载
2017/09/28 Javascript
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
Vue打包后出现一些map文件的解决方法
2018/02/13 Javascript
vue.js实现的经典计算器/科学计算器功能示例
2018/07/11 Javascript
详解vue移动端项目的适配(以mint-ui为例)
2018/08/17 Javascript
vue移动端项目缓存问题实践记录
2018/10/29 Javascript
socket io与vue-cli的结合使用的示例代码
2018/11/01 Javascript
JavaScript 中的执行上下文和执行栈实例讲解
2021/02/25 Javascript
python生成圆形图片的方法
2020/03/25 Python
Django框架实现的普通登录案例【使用POST方法】
2019/05/15 Python
如何更优雅地写python代码
2019/07/02 Python
python实现文本进度条 程序进度条 加载进度条 单行刷新功能
2019/07/03 Python
Django使用unittest模块进行单元测试过程解析
2019/08/02 Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
2020/01/20 Python
Python API len函数操作过程解析
2020/03/05 Python
python selenium操作cookie的实现
2020/03/18 Python
opencv之颜色过滤只留下图片中的红色区域操作
2020/06/05 Python
Python3开发环境搭建详细教程
2020/06/18 Python
医学生实习自荐信
2013/10/01 职场文书
自我评价中英文语句
2013/11/30 职场文书
高中生学期学习自我评价
2014/02/24 职场文书
个人安全承诺书
2014/05/22 职场文书
文员岗位职责范本
2015/04/16 职场文书
工作收入证明模板
2015/06/12 职场文书
员工担保书范本
2015/09/22 职场文书
某某店铺的开业庆典主持词范本
2019/11/25 职场文书
Python可视化神器pyecharts绘制地理图表
2022/07/07 Python
Go中使用gjson来操作JSON数据的实现
2022/08/14 Golang