详解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中的undefined 与 null 的区别  补充篇
Mar 17 Javascript
html+javascript实现可拖动可提交的弹出层对话框效果
Aug 05 Javascript
jQuery实现table隔行换色和鼠标经过变色的两种方法
Jun 15 Javascript
javascript的函数作用域
Nov 12 Javascript
教你如何使用node.js制作代理服务器
Nov 26 Javascript
Sublime Text 3常用插件及安装方法
Dec 16 Javascript
Bootstrap禁用响应式布局的实现方法
Mar 09 Javascript
vue2.x select2 指令封装详解
Oct 12 Javascript
vue使用 better-scroll的参数和方法详解
Jan 25 Javascript
实例讲解JS中pop使用方法
Jan 27 Javascript
three.js利用卷积法如何实现物体描边效果
Nov 27 Javascript
vue项目打包为APP,静态资源正常显示,但API请求不到数据的操作
Sep 12 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
DISCUZ 论坛管理员密码忘记的解决方法
2009/05/14 PHP
PHP session 会话处理函数
2016/06/06 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
2019/04/16 PHP
JavaScript 给汉字排序实例代码
2008/06/28 Javascript
解决iframe的frameborder在chrome/ff/ie下的差异
2010/08/12 Javascript
js 中 document.createEvent的用法
2010/08/29 Javascript
js判断移动端是否安装某款app的多种方法
2015/12/18 Javascript
input点击后placeholder中的提示消息消失
2016/01/15 Javascript
jquery ajax后台返回list,前台用jquery遍历list的实现
2016/10/30 Javascript
在DWR中实现直接获取一个JAVA类的返回值的两种方法
2016/12/25 Javascript
React组件的三种写法总结
2017/01/12 Javascript
浅谈JavaScript异步编程
2017/01/20 Javascript
js css3实现图片拖拽效果
2017/03/04 Javascript
微信小程序选择图片和放大预览图片功能
2017/11/02 Javascript
jquery的 filter()方法使用教程
2018/03/22 jQuery
用ES6的class模仿Vue写一个双向绑定的示例代码
2018/04/20 Javascript
Vue路由钩子之afterEach beforeEach的区别详解
2018/07/15 Javascript
vue 2.8.2版本配置刚进入时候的默认页面方法
2018/09/21 Javascript
微信小程序批量监听输入框对按钮样式进行控制的实现代码
2019/10/12 Javascript
[03:28]2014DOTA2国际邀请赛 EG战队官方纪录片
2014/07/21 DOTA
使用python编写android截屏脚本双击运行即可
2014/07/21 Python
跟老齐学Python之用while来循环
2014/10/02 Python
详解在Python的Django框架中创建模板库的方法
2015/07/20 Python
Pyhton中单行和多行注释的使用方法及规范
2016/10/11 Python
利用Python破解斗地主残局详解
2017/06/30 Python
Django 2.0版本的新特性抢先看!
2018/01/05 Python
python 图片去噪的方法示例
2019/07/09 Python
python字符串反转的四种方法详解
2019/12/02 Python
Python文件操作函数用法实例详解
2019/12/24 Python
pytorch标签转onehot形式实例
2020/01/02 Python
AmazeUI在模态框中嵌入表单形成模态输入框
2020/08/20 HTML / CSS
执行力心得体会
2013/12/31 职场文书
厂长岗位职责
2014/02/19 职场文书
高中议论文(范文2篇)
2019/08/19 职场文书
pandas数值排序的实现实例
2021/07/25 Python
Django中celery的使用项目实例
2022/07/07 Python