在函数返回-1的情况下(例如indexOf()),我经常遇到使用(!~val)而不是(val === -1)的人。
在我看来,与-1比较相比,逻辑NOT + NOT语句的可读性非常差。是否有足够的速度差异来保证使用一个而不是另一个?或者,如果不是速度,还有其他一些我没有使用逐位not而不是===的原因?
(如果这是dup,请提前道歉,但我找不到这个问题的确切答案。在SO或Google中搜索"!~“不太有效)
发布于 2012-09-04 23:11:05
不,它们绝对不是一样的。
按位转换将执行隐式类型强制。===运算符检查类型是否相等。
所以这两个可以给出完全不同的结果。
var val = "-1";
(!~val) // true
(val === -1) // false在这种情况下,我认为比较的意图和正确性远远超过了性能方面的考虑。确定你到底想要比较什么,并为工作使用正确的比较。
发布于 2012-09-04 23:06:54
这是一个有意义的性能差异吗?可能不会,但这完全取决于VM。
你总是可以使用像http://jsperf.com/这样的东西来找到答案
发布于 2012-09-04 23:21:35
Be pragmatic,追求可读性
这两个都是快速的f@$#关闭。
如果你的脚本有性能问题,它肯定不会归结为这个布尔检查。但正如其他人所说的那样,这两者并不(完全)相同。
https://stackoverflow.com/questions/12266301
复制相似问题