Javascript(以及其他语言)不会计算:
- 这里的
右侧
:imTrue || imFalse
- 这里的
右侧
:imFalse && imTrue
等等...
但是这些规则是否也适用于*按位*运算? (找不到任何mdn信息)
例如
- 1|1(这里会评估右侧吗?)
- 0&1(这里会计算右侧吗?)
最佳答案
您显示的逻辑运算符的右侧未计算,因为它们是 short circuit operators .
按位运算符不存在这样的东西(是的,它们不仅仅是 bool 运算符,它们是按位运算符,这完全改变了问题)。
一个简单的演示:
0 & (function(){ return console.log('evaluated'),1 })();
短路运算符的主要原因不是性能,而是避免此类评估中错误的能力:
if (a && a.pretty) ...
进行按位运算时很难需要短路保护。
另请注意,JavaScript 的弱类型使得当您不需要右侧时很难进行评估。 Luaan 给出了一个很好的例子:1|2
。
关于Javascript的按位运算符优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22089483/