为什么表达与' undefined'不返回布尔值

时间:2014-06-26 05:58:57

标签: javascript

我的问题可能很愚蠢,但为什么在表达式中

var query;
var n =  query && query.length > 0;

n是'undefined'而不是false?我希望表达式的计算结果为布尔值。 这让我很好奇。

1 个答案:

答案 0 :(得分:0)

&&计算其左操作数。如果左操作数是假的,则计算为其左操作数。否则,它将评估其右操作数。

由于JavaScript通常不具有强类型,因此大多数情况下它的工作方式与布尔结果相同,并允许使用||方便的技巧(如此):

var requestAnimationFrame = requestAnimationFrame ||
    window.webkitRequestAnimationFrame ||
    window.mozRequestAnimationFrame ||
    window.msRequestAnimationFrame ||
    window.oRequestAnimationFrame ||
    function (callback) { setTimeout(callback, 16); };

Here’s where it’s specified.

  

生产 LogicalANDExpression LogicalANDExpression &&    BitwiseORExpression 评估如下:

     
      
  1. lref 成为评估 LogicalANDExpression 的结果。
  2.   
  3. lval 为GetValue( lref )。
  4.   
  5. 如果ToBoolean( lval false ,请返回 lval
  6.   
  7. rref 成为评估 BitwiseORExpression 的结果。
  8.   
  9. 返回GetValue( rref )。
  10.   

另请参阅本节底部的说明,该说明直接解决了您的问题!

  

注意 &&||运算符生成的值不一定是布尔值类型。生成的值将始终是两个操作数表达式之一的值。