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".