可能重复:
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不存在,我希望它创建一个新画布。如果确实如此,则使用它。
答案 0 :(得分:5)
左边第一个。 ||
使用所谓的short-circuit evaluation,也称为最小评估,这意味着它只会评估表达式的右侧,如果左侧side是 false 。
来自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,则只会创建一个新的画布,因此您的代码是正确的。
答案 1 :(得分:2)
先离开。 如果隐式转换为布尔值失败则为正确。
答案 2 :(得分:1)
它尝试左边的一个,如果它是真的,它将不会执行右边的函数。
答案 3 :(得分:1)
如果ctx['ballctx']
是truthy,那么
createCanvas('game-screen', 'ballctx')
未获得评估ctx['ballctx']
已分配到ballctx
,否则
createCanvas('game-screen', 'ballctx')
createCanvas
次回复分配给ballctx
答案 4 :(得分:1)
如果大约等于true,则采用左表达式的值,否则无论值如何都采用右表达式的值。在一些较旧的浏览器中,根据过时的JavaScript 1.1规范,只返回true或false。
请参阅MDN:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Logical_Operators#Summary
答案 5 :(得分:0)
先离开。如果left为false或未定义,则只执行函数。