3

每隔一段时间,我就会遇到有人使用(!~val)而不是(val === -1)在从函数返回 -1 的情况下(例如indexOf())。

对我来说,与 -1 比较相比,逻辑 NOT + 按位 NOT 语句似乎非常不可读。是否有足够的速度差异来保证使用一个而不是另一个?或者如果不是速度,我错过了使用按位 NOT 代替 === 的其他一些原因?

(如果这是一个重复,请提前道歉。但我找不到这个确切问题的答案。搜索“!~”在 SO 或 Google 中不太适用)

4

3 回答 3

3

不,它们绝对不一样。

按位转换将执行隐式类型强制。=== 运算符检查类型是否相等。

所以这两个可以给出完全不同的结果。

var val = "-1";

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

在这种情况下,我认为比较的意图和正确性远远超过任何性能考虑。确定您要比较的确切内容,并为工作使用正确的比较。

于 2012-09-04T15:11:05.333 回答
1

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

您总是可以使用http://jsperf.com/之类的东西找到答案

于 2012-09-04T15:06:54.413 回答
0

务实,追求可读性

两者都f@$#快速关闭。

如果您的脚本有性能问题,它肯定不会归结为这个 boolean check。但正如其他人所说,这两者并不(完全)相同。

于 2012-09-04T15:21:34.953 回答