详解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类库Bindows1.3中的内存释放方式分析
Mar 08 Javascript
jquery fancybox ie6不显示关闭按钮的解决办法
Dec 25 Javascript
Javascript和Java获取各种form表单信息的简单实例
Feb 14 Javascript
jQuery简单实现QQ空间点赞已经取消点赞
Apr 02 Javascript
javascript类型系统 Window对象学习笔记
Jan 07 Javascript
js HTML5 Ajax实现文件上传进度条功能
Feb 13 Javascript
js以分隔符分隔数组中的元素并转换为字符串的方法
Nov 16 Javascript
javascript 中设置window.location.href跳转无效问题解决办法
Feb 09 Javascript
windows下vue-cli导入bootstrap样式
Apr 25 Javascript
如何让微信小程序页面之间的通信不再变困难
Jun 03 Javascript
微信小程序数据统计和错误统计的实现方法
Jun 26 Javascript
Vue触发input选取文件点击事件操作
Aug 07 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
Syphon 秘笈
2021/03/03 冲泡冲煮
PHP中include与require使用方法区别详解
2013/10/19 PHP
PHP四大安全策略
2014/03/12 PHP
php curl模拟post请求和提交多维数组的示例代码
2015/11/19 PHP
php 无限分类 树形数据格式化代码
2016/10/11 PHP
javascript查找字符串中出现最多的字符和次数的小例子
2013/10/29 Javascript
js删除Array数组中指定元素的两种方法
2016/08/03 Javascript
JavaScript中Number对象的toFixed() 方法详解
2016/09/02 Javascript
JavaScript日期选择功能示例
2017/01/16 Javascript
EasyUI的DataGrid每行数据添加操作按钮的实现代码
2017/08/22 Javascript
vue store之状态管理模式的详细介绍
2019/06/13 Javascript
js函数和this用法实例分析
2020/03/13 Javascript
[05:28]刀塔密之一:团结则存
2014/07/03 DOTA
Python socket.error: [Errno 98] Address already in use的原因和解决方法
2014/08/25 Python
使用Python来开发Markdown脚本扩展的实例分享
2016/03/04 Python
python实现动态数组的示例代码
2019/07/15 Python
TensorFlow——Checkpoint为模型添加检查点的实例
2020/01/21 Python
python3.6连接mysql数据库及增删改查操作详解
2020/02/10 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
2020/04/17 Python
python爬虫实例之获取动漫截图
2020/05/31 Python
使用OpenCV对车道进行实时检测的实现示例代码
2020/06/19 Python
Python爬虫与反爬虫大战
2020/07/30 Python
python3 通过 pybind11 使用Eigen加速代码的步骤详解
2020/12/07 Python
澳大利亚票务和娱乐市场领导者:Ticketmaster
2017/03/03 全球购物
英国最大的婴儿监视器网上商店:Baby Monitors Direct
2018/04/24 全球购物
奥地利智能家居和智能生活网上商店:tink.at
2019/10/07 全球购物
四年大学生活的自我评价范文
2014/02/07 职场文书
低碳环保倡议书
2014/04/14 职场文书
经典的毕业生自荐信范文
2014/04/14 职场文书
供货协议书
2014/04/22 职场文书
党支部特色活动方案
2014/08/20 职场文书
小学班级特色活动方案
2014/08/31 职场文书
2015年度个人工作总结报告
2015/10/24 职场文书
golang内置函数len的小技巧
2021/07/25 Golang
MySQL七大JOIN的具体使用
2022/02/28 MySQL
前端使用svg图片改色实现示例
2022/07/23 HTML / CSS