本文作者: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); // true
SameValue
就像字面意思 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的内容,谢谢。