本文作者:IMWeb etoileli 原文出处:IMWeb社区 未经同意,禁止转载
变量的运算是日常开发中必须且频繁接触的内容。
其中 相等运算符 可算是使用频率最高的运算符。
除了直接使用之外,我们平常使用的过滤、映射、排序等等,当然都会进行值的比较。
类型转换
有一定基础的开发中都知道,
在 JavaScript 中使用相等运算符,会进行类型转换,
举个例子:
代码语言:javascript复制'1' == 1 // true
true == 1 // true类型转换,在开发上,有时候会带给我们一些便利。
例如少写几句代码:)
但类型转换也会隐藏陷阱,就像下面的例子:
代码语言:javascript复制'0' == 0 // true
!!'0' == 0 // false假设字符串 0 跟 数字 0 均使用变量,
就会写出非常不直观,不符合直觉的代码:
代码语言:javascript复制a == b // true
!!a == b // false当然,如果我们使用了 === 全等运算符,就可以避免掉坑啦。
所以,在日常工作中,要多使用 === 哦。
SameValue 与 SameValueZero
SameValue 与 SameValueZero 会被成对提及的内容。
这两个玩意是用来做什么的呢?
SameValue 与 SameValueZero 其实是 ecma 中,比较值是否相等的算法,具体参考如下:
SameValue :http://ecma-international.org/ecma-262/6.0/#sec-samevalue
SameValueZero :http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero
SameValue 与 SameValueZero 是为了解决什么问题的嗯?
举个例子,我们都知道 NaN 的定义是与任何其他值均不相等。
因此,就会有以下结果:
代码语言:javascript复制NaN == NaN // false
NaN === NaN // false有的时候,我们还是希望可以判断 NaN ,因此就诞生了 SameValue:
SameValue(NaN, NaN); // trueSameValue 就像字面意思 Same Value ~
所以,对于 0 与 -0 则会认为是不同的值:
0 == -0 // true
0 === -0 // true
SameValue( 0, -0); // false以上两种情况,就是 SameValue 与 === 不同的地方。(判断 NaN, 0,-0 时)
那么还有,SameValueZero,
使用 SameValueZero 的话,对于 0 与 -0 则会认为是同一个值:
0 == -0 // true
0 === -0 // true
SameValue( 0, -0); // false
SameValueZero( 0, -0); // true所以, SameValueZero 与 === 只有一个不是的情况。(判断 NaN 时)
lodash
我们经常使用的 lodash,也有大量使用 SameValueZero,有兴趣的同学,可以都了解一下~
以上就是关于相等运算与 SameValue的内容,谢谢。


