详解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 相关文章推荐
JQuery Study Notes 学习笔记(一)
Aug 04 Javascript
jQuery防止click双击多次提交及传递动态函数或多参数
Apr 02 Javascript
JS判断form内所有表单是否为空的简单实例
Sep 09 Javascript
angular route中使用resolve在uglify压缩后问题解决
Sep 21 Javascript
jquery Banner轮播选项卡
Dec 26 Javascript
JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
Aug 18 Javascript
浅谈Angular4实现热加载开发旅程
Sep 08 Javascript
Vue cli3 库模式搭建组件库并发布到 npm的流程
Oct 12 Javascript
JS/jQuery实现超简单的Table表格添加,删除行功能示例
Jul 31 jQuery
vue移动端模态框(可传参)的实现
Nov 20 Javascript
uniapp,微信小程序中使用 MQTT的问题
Jul 11 Javascript
Jquery 获取相同NAME 或者id删除行操作
Aug 24 jQuery
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
二次元帅气男生排行榜,只想悄悄收藏系列
2020/03/04 日漫
关于PHP5 Session生命周期介绍
2010/03/02 PHP
PHP学习之输出字符串(echo,print,printf,print_r和var_dump)
2011/04/17 PHP
php实现的AES加密类定义与用法示例
2018/01/29 PHP
使用laravel根据用户类型来显示或隐藏字段
2019/10/17 PHP
复制本贴标题和地址的js代码
2008/07/01 Javascript
动态的改变IFrame的高度实现IFrame自动伸展适应高度
2012/12/28 Javascript
快速解决FusionCharts联动的中文乱码问题
2013/12/04 Javascript
js实现下拉框选择要显示图片的方法
2015/02/16 Javascript
jQuery实现的漂亮表单效果代码
2015/08/18 Javascript
一览画面点击复选框后获取多个id值的方法
2016/05/30 Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
2016/08/30 Javascript
Javascript生成带参数的二维码示例
2016/10/10 Javascript
Vue中如何实现轮播图的示例代码
2017/07/27 Javascript
Vue官网todoMVC示例代码
2018/01/29 Javascript
为jquery的ajax请求添加超时timeout时间的操作方法
2018/09/04 jQuery
微信小程序BindTap快速连续点击目标页面跳转多次问题处理
2019/04/08 Javascript
微信小程序调用微信支付接口的实现方法
2019/04/29 Javascript
微信小程序云开发 生成带参小程序码流程
2019/05/18 Javascript
解决vue单页面应用中动态修改title问题
2019/06/09 Javascript
用python实现的可以拷贝或剪切一个文件列表中的所有文件
2009/04/30 Python
linux下安装easy_install的方法
2013/02/10 Python
django搭建项目配置环境和创建表过程详解
2019/07/22 Python
Python爬虫新手入门之初学lxml库
2020/12/20 Python
web字体加载方案优化小结
2019/11/29 HTML / CSS
长曲棍球装备:Lacrosse Monkey
2020/12/02 全球购物
Linux管理员面试经常问道的相关命令
2014/12/12 面试题
生日礼品店创业计划书范文
2014/03/21 职场文书
大学新闻系自荐书
2014/05/31 职场文书
我的中国梦演讲稿600字
2014/08/19 职场文书
教师竞聘上岗演讲稿
2014/09/03 职场文书
幼儿园见习报告
2014/10/30 职场文书
2014年妇幼保健工作总结
2014/12/08 职场文书
2015年入党积极分子培养考察意见
2015/08/12 职场文书
英语版自我评价,35句话轻松搞定
2019/10/08 职场文书
教你快速开启Apache SkyWalking的自监控
2021/04/25 Servers