“!〜index”比“index === -1”更快吗?

3

有时候我会遇到一些人在函数返回-1时使用(!~val)而不是(val === -1)

对我来说,逻辑非 + 按位非语句与比较-1相比,显得难以阅读。是否存在足够的速度差异来使我们选择其中一种方式?或者除了速度之外,是否还有其他原因可以使用按位非而不是===?

(提前道歉,如果这是一个重复的问题,但我无法找到这个确切问题的答案。在SO或Google中搜索“!〜”并不能很好地解决问题)

3个回答

3
不,它们绝对不相同。
按位转换将进行隐式类型转换。 === 运算符检查类型相等性。
所以这两个可能会产生完全不同的结果。
var val = "-1";

(!~val) // true
(val === -1)  // false

在这种情况下,我认为比较的目的和正确性远远超过任何性能考虑。确定您想要比较的内容,并针对该任务使用正确的比较方法。

感谢您提醒类型强制转换的问题,我之前并不知道。 - eterps

1

这是否是一个有意义的性能差异?可能不是,但这完全取决于虚拟机。

您可以随时使用类似http://jsperf.com/的工具来找出答案。


0

做到务实, 追求可读性

两者都要快得离谱

如果你的脚本存在性能问题,那么这个布尔检查肯定不是问题所在。但正如其他人所说,这两者并不完全相同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接