有些开发者认为,最好永远都不要使用相等操作符 。全等操作符的结果更容易预测,并且因为没有隐式转换,全等比较的操作会更快 。
同值相等同值相等解决了最后一个用例:确定两个值是否在任何情况下功能上是相同的 。(这个用例演示了里氏替换原则的实例 。)当试图对不可变(immutable)属性修改时发生出现的情况:
Object.defineProperty 在试图修改不可变属性时,如果这个属性确实被修改了则会抛出异常,反之什么都不会发生 。例如如果 v 是 -0 ,那么没有发生任何变化,所以也不会抛出任何异常 。但如果 v 是 +0 ,则会抛出异常 。不可变属性和新设定的值使用 same-value 相等比较 。同值相等由 Object.is 方法提供 。
零值相等与同值相等类似,不过会认为 +0 与 -0 相等 。
理解相等比较的模型在 ES2015 以前,你可能会说双等和三等是“扩展”的关系 。比如有人会说双等是三等的扩展版,因为他处理三等所做的,还做了类型转换 。例如 6 == “6”。反之另一些人可能会说三等是双等的扩展,因为他还要求两个参数的类型相同,所以增加了更多的限制 。怎样理解取决于你怎样看待这个问题 。
但是这种比较的方式没办法把 ES2015 的 Object.is 排列到其中 。因为 Object.is 并不比双等更宽松,也并不比三等更严格,当然也不是在他们中间 。从下表中可以看出,这是由于 Object.is 处理 NaN 的不同 。注意假如 Object.is(NaN, NaN) 被计算成 false ,我们就可以说他比三等更为严格,因为他可以区分 -0 和 +0。但是对 NaN 的处理表明,这是不对的 。Object.is 应该被认为是有其特殊的用途,而不应说他和其他的相等更宽松或严格 。
推荐阅读
- 乌龟苗怎么看公母 龟苗状态怎么判断公母
- 怎么判断爽肤水过期没有 怎么判断爽肤水过期
- 免费分享这4种转换方式 java字符串转int方法
- oracle中替换字段内容 oracle替换指定字符串字符
- 精油一般多久过期 怎么判断精油是否过期
- js中if判断两个条件 js判断数据类型
- 白菜 发霉 怎么判断白菜是否发霉
- 粘土粘手是过期了吗? 怎么判断粘土是否过期
- 怎么判断防水过期 怎么判断防水过期了
- 怎么看手机是否更换过屏幕 怎么判断有没有更换屏幕