Possible Duplicate:
In Javascript, what does it mean when there is a logical operator in a variable declaration?




只是一个简单的问题。当我声明这样的变量时:

    var ballctx = ctx['ballctx'] || createCanvas('game-screen', 'ballctx');


它首先尝试从左开始还是从右开始?如果ballctx的ctx不存在,我希望它创建一个新的画布。如果确实如此,它会改用它。

最佳答案

左先。 ||使用所谓的short-circuit evaluation(也称为最小求值),这意味着,如果左侧为假,则仅对表达式的右侧求值。

根据ECMAScript语言规范:


  11.11. Binary Logical Operators
  
  产生LogicalORExpression:LogicalORExpression || LogicalANDExpression的评估如下:
  
  
  令lref为评估LogicalORExpression的结果。
  令lval为GetValue(lref)。
  如果ToBoolean(lval)为true,则返回lval。
  令rref为评估LogicalANDExpression的结果。
  返回GetValue(rref)。
  


因此,在您的表情中:

ctx['ballctx'] || createCanvas('game-screen', 'ballctx');
^-- lval          ^-- rval


如果lval评估为true,则将不评估rval。换句话说,仅当ctx['ballctx']的值为false时,才创建一个新画布,因此您的代码是正确的。

09-25 12:18