每隔一段时间,我就会遇到有人使用(!~val)
而不是(val === -1)
在从函数返回 -1 的情况下(例如indexOf()
)。
对我来说,与 -1 比较相比,逻辑 NOT + 按位 NOT 语句似乎非常不可读。是否有足够的速度差异来保证使用一个而不是另一个?或者如果不是速度,我错过了使用按位 NOT 代替 === 的其他一些原因?
(如果这是一个重复,请提前道歉。但我找不到这个确切问题的答案。搜索“!~”在 SO 或 Google 中不太适用)
每隔一段时间,我就会遇到有人使用(!~val)
而不是(val === -1)
在从函数返回 -1 的情况下(例如indexOf()
)。
对我来说,与 -1 比较相比,逻辑 NOT + 按位 NOT 语句似乎非常不可读。是否有足够的速度差异来保证使用一个而不是另一个?或者如果不是速度,我错过了使用按位 NOT 代替 === 的其他一些原因?
(如果这是一个重复,请提前道歉。但我找不到这个确切问题的答案。搜索“!~”在 SO 或 Google 中不太适用)
不,它们绝对不一样。
按位转换将执行隐式类型强制。=== 运算符检查类型是否相等。
所以这两个可以给出完全不同的结果。
var val = "-1";
(!~val) // true
(val === -1) // false
在这种情况下,我认为比较的意图和正确性远远超过任何性能考虑。确定您要比较的确切内容,并为工作使用正确的比较。
这是有意义的性能差异吗?可能不会,但这完全取决于虚拟机。
您总是可以使用http://jsperf.com/之类的东西找到答案