Javascript(以及其他语言)无法评估:
right
方:imTrue || imFalse
right
方:imFalse && imTrue
但这些规则是否也适用于* 按位* 操作? (找不到任何mdn信息)
e.g。
答案 0 :(得分:2)
您显示的逻辑运算符中的右侧未计算,因为它们是short circuit operators。
对于按位运算符没有这样的东西(是的,它们不仅仅是布尔运算符,它们是按位运算符,这会改变问题)。
一个简单的演示:
0 & (function(){ return console.log('evaluated'),1 })();
短路操作员的主要原因不是性能,而是能够避免此类评估中的错误:
if (a && a.pretty) ...
在进行按位操作时很难满足短路保护的需要。
另请注意,当您不需要右侧时,javascript的弱类型会使您难以评估。 Luaan给出了一个很好的例子:1|2
。