Javascript: это условное задание?

Из кода отслеживания Google Analytics:

var _gaq = _gaq || [];

как это работает?

Это условное присвоение значения переменной? Это то же самое, что сказать:

if( !(_gaq) ) {_gaq = []; }

?

Ответы

Ответ 1

Оператор or (||) вернет левую сторону, если это истинное значение, иначе оно вернет правую сторону.

Он очень похож на ваш второй пример, но поскольку он использует ключевое слово var, он также устанавливает локальную область для переменной.

Ответ 2

Да, это так.

Оператор || оценивает его левый "правдивый" операнд.
Если _gaq является "ложным" (например, null, undefined или 0), он будет оценивать в правой части ([]).

Ответ 3

Это то же самое, что сказать:

if( !(_gaq) ) {var _gaq = [];}

(Это можно сделать, поскольку var выровнен над условной проверкой, тем самым избегая "неопределенной" ошибки, и это также приведет к тому, что _gaq будет автоматически обрабатываться как локальный по области.)

Ответ 4

На самом деле это не то же самое, что сказать:

if (!_gaq) _gaq = [];

по крайней мере, не обязательно. Рассмотрим это:

function outer() {
  var _gaq = null;
  function inner() {
    var _gaq = _gaq || [];
    // ...
  }

  inner();
  _gaq = 1;
  inner();
}

Когда есть "_gaq" (я ненавижу печатать, что, кстати) во внешней лексической области, то в итоге вы являетесь переменной new во внутренней области. Оператор if if отличается тем, что очень важно:— в этом случае будет только один "_gaq".