用||声明变量

1 javascript variables

可能重复:
在Javascript中,当变量声明中存在逻辑运算符时,它意味着什么?

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

    var ballctx = ctx['ballctx'] || createCanvas('game-screen', 'ballctx');
Run Code Online (Sandbox Code Playgroud)

它是尝试左边还是右边?如果ctx ballctx不存在,我希望它创建一个新的画布.如果确实如此,则使用它.

Joã*_*lva 5

左边第一个.||使用所谓的短路评估,也称为最小评估,这意味着它只会评估表达式的右侧,如果左侧是假的.

来自ECMAScript语言规范:

11.11.二元逻辑运算符

生产LogicalORExpression:LogicalORExpression || LogicalANDExpression评估如下:

  1. 让lref成为评估LogicalORExpression的结果.
  2. 设lval为GetValue(lref).
  3. 如果ToBoolean(lval)为true,则返回lval.
  4. 让rref成为评估LogicalANDExpression的结果.
  5. 返回GetValue(rref).

因此,在你的表达中:

ctx['ballctx'] || createCanvas('game-screen', 'ballctx');
^-- lval          ^-- rval
Run Code Online (Sandbox Code Playgroud)

如果lval 评估true,rval则不会进行评估.换句话说,如果ctx['ballctx']求值为false ,您将只创建一个新画布,因此您的代码是正确的.