详解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实现下拉收缩(展开与折叠)特效
Dec 25 Javascript
jquery select动态加载选择(兼容各种浏览器)
Feb 01 Javascript
原生JS实现加入收藏夹的代码
Oct 24 Javascript
JS实现点击文字对应DIV层不停闪动效果的方法
Mar 02 Javascript
jQuery实现判断滚动条到底部
Jun 23 Javascript
jQuery简单实现验证邮箱格式
Jul 15 Javascript
React快速入门教程
Jan 17 Javascript
jQuery使用EasyUi实现三级联动下拉框效果
Mar 08 Javascript
JS实现简单的选择题测评系统代码思路详解(demo)
Sep 03 Javascript
Vue DevTools调试工具的使用
Dec 05 Javascript
Vue自定义指令写法与个人理解
Feb 09 Javascript
通过javascript实现段落的收缩与展开
Jun 26 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
FCKeditor添加自定义按钮
2008/03/27 PHP
php计算函数执行时间的方法
2015/03/20 PHP
PHP curl伪造IP地址和header信息代码实例
2015/04/27 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
2016/12/29 PHP
phpstudy2020搭建站点的实现示例
2020/10/30 PHP
Javascript 篱式条件判断
2008/08/22 Javascript
利用Javascript判断操作系统的类型实现不同操作系统下的兼容性
2013/01/29 Javascript
jQuery 中国省市两级联动选择附图
2014/05/14 Javascript
Javascript中call与apply的学习笔记
2014/09/22 Javascript
JS获取表格内指定单元格html内容的方法
2015/03/31 Javascript
JS+CSS实现仿触屏手机拨号盘界面及功能模拟完整实例
2015/05/16 Javascript
JavaScript使ifram跨域相互访问及与PHP通信的实例
2016/03/03 Javascript
jquery+ajax实现直接提交表单实例分析
2016/06/17 Javascript
微信小程序 选择器(时间,日期,地区)实例详解
2016/11/16 Javascript
JS实现的计数排序与基数排序算法示例
2017/12/04 Javascript
vue组件实现可搜索下拉框扩展
2020/10/23 Javascript
nuxt中使用路由守卫的方法步骤
2019/01/27 Javascript
JavaScript内置对象math,global功能与用法实例分析
2019/06/10 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
2019/10/10 Javascript
python机器学习之神经网络(三)
2017/12/20 Python
tensorflow 获取变量&打印权值的实例讲解
2018/06/14 Python
Python嵌套列表转一维的方法(压平嵌套列表)
2018/07/03 Python
解决Pycharm后台indexing导致不能run的问题
2019/06/27 Python
Python获取当前脚本文件夹(Script)的绝对路径方法代码
2019/08/27 Python
python ftplib模块使用代码实例
2019/12/31 Python
tensorflow指定GPU与动态分配GPU memory设置
2020/02/03 Python
HTML5移动端开发中的Viewport标签及相关CSS用法解析
2016/04/15 HTML / CSS
大一军训感言
2014/01/09 职场文书
运动会入场词100字
2014/02/06 职场文书
环保倡议书500字
2014/05/15 职场文书
代领毕业证委托书
2014/08/02 职场文书
明星员工获奖感言
2014/08/14 职场文书
单位单身证明样本
2014/10/11 职场文书
小学教育见习报告
2014/10/31 职场文书
继续教育心得体会(共6篇)
2016/01/19 职场文书
《中国机长》观后感:敬畏生命,敬畏职责
2019/11/12 职场文书