2012-09-10 3 views
1

Можно создать дубликат:
In Javascript, what does it mean when there is a logical operator in a variable declaration?Объявление переменных с ||

Просто быстрый вопрос. Когда я объявить переменную как это:

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

ли попробовать его левый первый или право первого? Я хочу, чтобы он создал новый холст, если ctx ballctx не существует. Если это так, то вместо этого оно используется.

+0

пытается левый первых, если она не существует, используется правильный. как 'var ballctx = (ctx ['ballctx']? Ctx ['ballctx']: createCanvas ('игровой экран', 'ballctx')' – C5H8NNaO4

ответ

5

Первый слева. || использует то, что называется short-circuit evaluation, также известный как минимальной оценки, то есть он будет оценивать только правую часть выражения, если левая сторона ложной.

Из спецификации ECMAScript Язык:

11.11. Binary Logical Operators

Производство ВыражениеЛогическогоИЛИ: LogicalORExpression || LogicalANDExpression оценивается следующим образом:

  1. Пусть LRef быть результатом оценки ВыраженияЛогическогоИЛИ.
  2. Позвольте lval быть GetValue (lref).
  3. Если ToBoolean (lval) истинно, верните lval.
  4. Позвольте rref быть результатом оценки LogicalANDExpression.
  5. Возврат GetValue (rref).

Таким образом, в этом выражении:

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

Если lvalоценивает в true, rval не будет оцениваться. Другими словами, вы создадите только новый холст, если ctx['ballctx'] оценивает значение false, поэтому ваш код верен.

2

В левой части. Если неявный приведение в boolean терпит неудачу, то правильно.

1

Он пробует левый, если его истинно, он не выполнит функцию справа.

1

ctx['ballctx'] Если это truthy то

  • createCanvas('game-screen', 'ballctx') не получить оценку
  • ctx['ballctx'] присваивается ballctx

иначе

  • createCanvas('game-screen', 'ballctx') оценивается
  • независимо createCanvas возвращает получает назначение в ballctx
0

Левой первым. Если влево значение false или undefined, будет выполняться только функция.

1

Значение левого выражения берется, если оно приблизительно равно true, в противном случае значение правильного выражения принимается независимо от значения. В некоторых старых браузерах, в соответствии с устаревшей спецификацией JavaScript 1.1, возвращается только true или false.

См MDN: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Logical_Operators#Summary

Смежные вопросы