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时,才创建一个新画布,因此您的代码是正确的。