2012-09-10 2 views
1

Possible en double:
In Javascript, what does it mean when there is a logical operator in a variable declaration?Déclaration de variables avec ||

Juste une petite question. Quand je déclare une variable comme ceci:

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

-t-il essayer la gauche première ou le premier droit? Je veux qu'il crée une nouvelle toile si ctx de ballctx n'existe pas. Si c'est le cas, utilisez-le à la place.

+0

il tente la gauche d'abord, si elle n'existe pas le droit est utilisé. comme 'var ballctx = (ctx ['ballctx']? Ctx ['ballctx']: createCanvas ('écran de jeu', 'ballctx')' – C5H8NNaO4

Répondre

5

La gauche en premier. || utilise ce qu'on appelle short-circuit evaluation, également connu sous le nom évaluation minimale, ce qui signifie qu'il ne sera évaluée du côté droit de l'expression, si le côté gauche est faux.

De l'ECMAScript Language Specification:

11.11. Binary Logical Operators

Le LogicalORExpression de production: LogicalORExpression || LogicalANDExpression est évaluée comme suit:

  1. Soit LREF être le résultat de l'évaluation LogicalORExpression.
  2. Soit lval être GetValue (lref).
  3. Si ToBoolean (lval) est vrai, renvoyer lval.
  4. Soit rref le résultat de l'évaluation de LogicalANDExpression.
  5. Retourne la valeur GetValue (rref).

Ainsi, dans l'expression:

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

Si lvalévalue à true, rval ne seront pas évaluées. En d'autres termes, vous ne créerez un nouveau canevas que si ctx['ballctx'] a la valeur false, donc votre code est correct.

2

À gauche en premier. Si la conversion implicite en booléen échoue, alors à droite.

1

Il essaie celui de gauche, s'il est vrai il n'exécutera pas la fonction sur la droite.

1

Si ctx['ballctx'] est truthy alors

  • createCanvas('game-screen', 'ballctx') ne sont pas évalués
  • ctx['ballctx'] est affecté à ballctx

autrement

  • createCanvas('game-screen', 'ballctx') est évalué
  • quel que soit createCanvas retours obtient assignés à ballctx
0

gauche en premier. Si left est faux ou indéfini alors seule la fonction sera exécutée.

Questions connexes