详解JavaScript中的Object.is()与"==="运算符总结
三重相等运算符===严格检查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
对对象执行严格相等检查时,对象仅与自身严格相等:
constmyObject={prop:'Value'}; myObject===myObject;//=>true
即使2个对象的属性和值完全相同,它们的值也不同:
constmyObject1={prop:'Value'}; constmyObject2={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,作者:DmitriPavlutin,翻译:公众号《前端全栈开发者》
到此这篇关于详解JavaScript中的Object.is()与"==="运算符总结的文章就介绍到这了,更多相关JavaScript中的Object.is()与"==="运算符内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。