Что является “var _gaq = _gaq || []”; для?

Асинхронный код Отслеживания в Google Analytics похож на это:

var _gaq = _gaq || []; 
_gaq.push(['_setAccount', 'UA-XXXXX-X']); 
_gaq.push(['_trackPageview']); 

(function() { 
  var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; 
  ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; 
  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); 
})(); 

О первой строке:

var _gaq = _gaq || []; 

Я думаю, что это гарантирует это если _gaq уже определяется мы должны использовать его иначе, мы должны массив.

Кто-либо может объяснить, для чего это?

Кроме того, делает это имеет значение если _gaq переименован? Другими словами, делает Google Analytics, полагаются на названный глобальный объект _gaq?

46
задан mauris 13 April 2011 в 02:31
поделиться

6 ответов

Да, это гарантирует, что _gaq определен, так что _gaq.push() никогда не сработает.

Я бы не стал возиться с именами переменных в коде GA... есть ли у вас причины для этого? Не конфликтует ли оно с какими-нибудь вашими переменными? (Тогда я бы изменил свои...)

15
ответ дан 26 November 2019 в 20:37
поделиться

Эта строка позволяет разместить несколько фрагментов GA на одной странице. Это гарантирует, что второй фрагмент не перезапишет _gaq, определенный первым.

Асинхронное отслеживание GA работает, сначала определяя _gaq как массив. Этот массив действует как очередь, которая позволяет вам помещать (добавлять) конфигурацию и отслеживать «команды» (например, _trackPageview) в конец очереди. Ваши команды хранятся в этом массиве до полной загрузки ga.js.

Когда ga.js готов, он выполняет все команды в массиве _gaq и заменяет _gaq объектом. Этот объект также имеет метод push, но вместо того, чтобы помещать команды в очередь, он выполняет их немедленно, поскольку для их обработки доступен ga.js.

Этот механизм позволяет вам выполнять команды настройки и отслеживания, не зная, завершил ли браузер загрузку ga.js. Это необходимо, потому что асинхронный фрагмент загружает ga.js, не блокируя выполнение другого кода на странице. Все стало бы непросто, если бы этому другому коду (командам конфигурации) нужно было знать состояние загружаемого ga.js.

Все это абсолютно действительно зависит от использования имени _gaq. Не пытайтесь назвать его, если хотите, чтобы работало асинхронное отслеживание.

25
ответ дан 26 November 2019 в 20:37
поделиться

Это означает, что если _gaq уже определен, он использует то, что в противном случае объявляет пустой массив. С помощью нажатия вы можете изменить настройки. Если объект _gaq не был определен, две «строки» после этого привели бы к ошибке.

Да, объект _gaq ожидается в сценарии, который вы включаете в код (ga.js).

0
ответ дан 26 November 2019 в 20:37
поделиться

Да, он делает именно то, что вы думаете:) Это сокращение для

if(!_gaq){ var _gaq = [] }
2
ответ дан 26 November 2019 в 20:37
поделиться

Использование || в присвоении - это распространенный программный трюк, который использует направление оценки оператора, которое слева направо. Это означает, что сначала он оценивает левую сторону. Затем, и , только если это ложь (или ложный эквивалент), оценивает ли она правую часть.

Вы также можете воспользоваться преимуществами операторов || или && в простом выражении if, чтобы

if (a > 5) {
  do_a();
}

if (!some_boolean) {
  do_b();
}

превратилось в

a > 5 && do_a();
some_boolean || do_b(); // Note that the negation operator `!` is gone!

, что в обоих случаях лучше .

Причина, по которой языки допускают это, заключается в том, что оценка правой стороны является пустой тратой времени, если левая сторона все равно приведет к отказу всей строки. Поэтому он просто игнорирует это, если в этом нет необходимости.

13
ответ дан 26 November 2019 в 20:37
поделиться

РЕДАКТИРОВАТЬ:

Я добавлю больше деталей

_gaq - это просто массив javascript, как определено вначале. вы добавляете к нему события, такие как обратные вызовы отслеживания событий

, когда загружается сценарий ga.js, однако Google берет этот массив и превращает его в объект, который использует ga.

Вот почему вы помещаете функции в массив _gaq, а затем вызываете скрипт ga.js после того, как закончите построение массива.

gaq - это очередь Google Analytics. это стек для методов GA, таких как отслеживание событий, атрибуция страницы и т. д., вы используете метод push (), чтобы поместить туда материалы GA. уменьшает влияние событий, каждый должен это делать или, по крайней мере, изучить концепцию.

3
ответ дан 26 November 2019 в 20:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: