详解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 构建一个xmlhttp对象池合理创建和使用xmlhttp对象
Jan 15 Javascript
JS中confirm,alert,prompt函数使用区别分析
Apr 01 Javascript
关于div自适应高度/左右高度自适应一致的js代码
Mar 22 Javascript
jquery trigger伪造a标签的click事件取代window.open方法
Jun 23 Javascript
node.js中的fs.renameSync方法使用说明
Dec 16 Javascript
js中函数声明与函数表达式
Jun 03 Javascript
js实现可键盘控制的简单抽奖程序
Jul 13 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
Jul 16 Javascript
vue生命周期实例小结
Aug 15 Javascript
node和vue实现商城用户地址模块
Dec 05 Javascript
微信小程序云开发之模拟后台增删改查
May 16 Javascript
JS模拟浏览器实现全局搜索功能
Sep 11 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
用session做客户验证时的注意事项
2006/10/09 PHP
PHP最常用的2种设计模式工厂模式和单例模式介绍
2012/08/14 PHP
php变量与数组相互转换的方法(extract与compact)
2016/12/02 PHP
基于thinkPHP类的插入数据库操作功能示例
2017/01/06 PHP
Laravel实现通过blade模板引擎渲染视图
2019/10/25 PHP
IE8 下的Js错误HTML Parsing Error...
2009/08/14 Javascript
NodeJS 模块开发及发布详解分享
2012/03/07 NodeJs
简单的代码实现jquery定时器
2013/11/17 Javascript
Javascript中常见的校验如域名、手机、邮箱等等
2014/01/02 Javascript
获取select元素被选中的文本内容的js代码
2014/01/29 Javascript
动态创建script标签实现跨域资源访问的方法介绍
2014/02/28 Javascript
利用Keydown事件阻止用户输入实现代码
2014/03/11 Javascript
js事件监听器用法实例详解
2015/06/01 Javascript
js实现iPhone界面风格的单选框和复选框按钮实例
2015/08/18 Javascript
EasyUI学习之Combobox下拉列表(1)
2016/12/29 Javascript
Vue.js 2.0中select级联下拉框实例
2017/03/06 Javascript
利用百度地图API获取当前位置信息的实例
2017/11/06 Javascript
微信小程序实现image组件图片自适应宽度比例显示的方法
2018/01/16 Javascript
微信小程序checkbox组件使用详解
2018/01/31 Javascript
vue 使用eventBus实现同级组件的通讯
2018/03/02 Javascript
使用ESLint禁止项目导入特定模块的方法步骤
2019/03/04 Javascript
详解Vue 匿名、具名和作用域插槽的使用方法
2019/04/22 Javascript
小程序实现锚点滑动效果
2019/09/23 Javascript
Python简单实现Base64编码和解码的方法
2017/04/29 Python
安装Python和pygame及相应的环境变量配置(图文教程)
2017/06/04 Python
浅谈python中拼接路径os.path.join斜杠的问题
2018/10/23 Python
Django Admin设置应用程序及模型顺序方法详解
2020/04/01 Python
客户经理岗位职责
2013/12/08 职场文书
军训自我鉴定
2013/12/14 职场文书
城建学院毕业生自荐信
2014/01/31 职场文书
教师远程培训感言
2014/03/06 职场文书
医务人员医德考评自我评价
2015/03/03 职场文书
2015年社会实践个人总结
2015/03/06 职场文书
副总经理岗位职责范本
2015/04/08 职场文书
环保宣传语大全
2015/07/13 职场文书
python实战之用emoji表情生成文字
2021/05/08 Python