详解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 相关文章推荐
通过 Dom 方法提高 innerHTML 性能
Mar 26 Javascript
Javascript学习笔记 delete运算符
Sep 13 Javascript
这些年、我收集的JQuery代码小结
Aug 01 Javascript
滚动图片效果 jquery实现回旋滚动效果
Jan 08 Javascript
jQuery判断iframe中元素是否存在的方法
May 11 Javascript
JavaScript如何实现跨域请求
Aug 05 Javascript
Easyui的组合框的取值与赋值
Oct 28 Javascript
jQuery时间验证和转换为标准格式的时间格式
Mar 06 Javascript
ES6实现的遍历目录函数示例
Apr 07 Javascript
基于Vue实现页面切换左右滑动效果
Jun 29 Javascript
Vue使用NPM方式搭建项目
Oct 25 Javascript
浅谈layui 绑定form submit提交表单的注意事项
Oct 25 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
php 操作符与控制结构
2012/03/07 PHP
php+ajax实时输入自动搜索匹配的方法
2014/12/26 PHP
php获取从html表单传递数组的方法
2015/03/20 PHP
php实现JWT(json web token)鉴权实例详解
2019/11/05 PHP
JavaScript Memoization 让函数也有记忆功能
2011/10/27 Javascript
JS实现的用来对比两个用指定分隔符分割的字符串是否相同
2014/09/19 Javascript
JavaScript实现99乘法表及隔行变色实例代码
2016/02/24 Javascript
一起学写js Calender日历控件
2016/04/14 Javascript
快速解决jquery.touchSwipe左右滑动和垂直滚动条冲突
2016/04/15 Javascript
非常实用的js验证框架实现源码 附原理方法
2016/06/08 Javascript
Nodejs进阶:核心模块net入门学习与实例讲解
2016/11/21 NodeJs
浅谈react.js中实现tab吸顶效果的问题
2017/09/06 Javascript
JavaScript如何获取到导航条中HTTP信息
2017/10/10 Javascript
浅谈React Native Flexbox布局(小结)
2018/01/08 Javascript
利用d3.js力导布局绘制资源拓扑图实例教程
2019/01/08 Javascript
一些可能会用到的Node.js面试题
2019/06/15 Javascript
Vue Element UI + OSS实现上传文件功能
2019/07/31 Javascript
解决Vue.js应用回退或刷新界面时提示用户保存修改问题
2019/11/24 Javascript
在NodeJs中使用node-schedule增加定时器任务的方法
2020/06/08 NodeJs
粗略分析Python中的内存泄漏
2015/04/23 Python
用Python编写简单的定时器的方法
2015/05/02 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
2018/03/14 Python
Flask框架Flask-Principal基本用法实例分析
2018/07/23 Python
浅谈Pandas:Series和DataFrame间的算术元素
2018/12/22 Python
python定位xpath 节点位置的方法
2019/08/27 Python
调用其他python脚本文件里面的类和方法过程解析
2019/11/15 Python
python读取tif图片时保留其16bit的编码格式实例
2020/01/13 Python
Python如何操作docker redis过程解析
2020/08/10 Python
浅谈如何使用python抓取网页中的动态数据实现
2020/08/17 Python
查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法
2021/01/05 Python
将世界上最美丽的摄影作品转化为艺术作品:Photos.com
2017/11/28 全球购物
用C语言实现文件读写操作
2013/10/27 面试题
开业庆典邀请函
2014/01/08 职场文书
2014年父亲节活动方案
2014/03/06 职场文书
初中政治教师教学反思
2016/02/23 职场文书
游戏《铁拳》动画化!2022年年内播出
2022/03/21 日漫