我的问题可能很愚蠢,但为什么在表达式中
var query;
var n = query && query.length > 0;
n是'undefined'而不是false?我希望表达式的计算结果为布尔值。 这让我很好奇。
答案 0 :(得分:0)
&&
计算其左操作数。如果左操作数是假的,则计算为其左操作数。否则,它将评估其右操作数。
由于JavaScript通常不具有强类型,因此大多数情况下它的工作方式与布尔结果相同,并允许使用||
方便的技巧(如此):
var requestAnimationFrame = requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.msRequestAnimationFrame ||
window.oRequestAnimationFrame ||
function (callback) { setTimeout(callback, 16); };
生产 LogicalANDExpression : LogicalANDExpression && BitwiseORExpression 评估如下:
- 让 lref 成为评估 LogicalANDExpression 的结果。
- 让 lval 为GetValue( lref )。
- 如果ToBoolean( lval ) false ,请返回 lval 。
- 让 rref 成为评估 BitwiseORExpression 的结果。
- 返回GetValue( rref )。
醇>
另请参阅本节底部的说明,该说明直接解决了您的问题!
注意
&&
或||
运算符生成的值不一定是布尔值类型。生成的值将始终是两个操作数表达式之一的值。