#javascript #google-analytics #jslint #jshint
#javascript #google-analytics #jslint #jshint
Вопрос:
Как исправить ошибку JSLint «Неожиданное выражение присваивания», не нарушая analytics.js функциональность?
Проблемная строка:
(w[g].q = w[g].q || []).push(arguments);
Полный код:
<script src=//www.google-analytics.com/analytics.js async></script>
<script>
/*global window: false, ga: false */
(function (w, g) {
'use strict';
w.GoogleAnalyticsObject = g;
w[g] = w[g] || function () {
(w[g].q = w[g].q || []).push(arguments);
};
w[g].l = new Date();
ga('create', 'UA-XXXX-Y', 'auto');
ga('send', 'pageview');
}(window, 'ga'));
</script>
Что было сделано:
- Избегаемые «асинхронные скрипты», введенные сценарием, поскольку считаются вредными
- Следовал рекомендациям JSLint
Комментарии:
1. Мой совет, переключитесь на JSHint.
2. Где вы определяете
arguments
? глобальный? Мне кажется, вы создаете массив с большим количеством неопределенных.3. @BillyBlaze —
arguments
не является глобальным. Он создается автоматически внутри любой функции и представляет собой массивоподобный объект, содержащий ссылки на аргументы, переданные в функцию.4. Спасибо, сегодня я узнал кое-что новое. Я также получил здесь дополнительную информацию sebarmeli.com/blog/2010/11/12 /…
Ответ №1:
Вы можете просто разделить его на две строки:
w[g].q = w[g].q || [];
w[g].q.push(arguments);
Это будет работать точно так же, просто делает код немного понятнее. Первая строка проверяет, является ли w[g].q
она правдивой (предположительно, это будет undefined
до первого запуска кода), и если это так, то ей присваивается пустой массив.
Это относительно распространенный метод, который эффективно сокращает if
оператор. Если вы хотите сделать код более понятным, вы можете просто использовать один из них:
if (!w[g].q) {
w[g].q = [];
}
w[g].q.push(arguments);