【问题标题】:JSLint 100% valid Google Universal Analytics snippet, fix "Unexpected assignment expression"JSLint 100% 有效的 Google Universal Analytics 片段,修复“意外的赋值表达式”
【发布时间】:2014-08-17 17:20:30
【问题描述】:

如何在不破坏 analytics.js 功能的情况下修复 JSLint 错误 "Unexpected assignment expression"?

有问题的行:

(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>

做了什么:

  1. 自considered harmful 以来避免了注入脚本的“异步脚本”
  2. 已关注JSLint 建议

【问题讨论】:

  • 我的建议,切换到 JSHint。
  • 你在哪里定义arguments?全球的?在我看来,您正在创建一个包含很多未定义的数组。
  • @BillyBlaze - arguments 不是全球性的。它是在任何函数内部自动创建的,是一个类似数组的对象,其中包含对传递给函数的参数的引用。
  • 谢谢,我今天学到了新东西。我还在这里获得了更多信息sebarmeli.com/blog/2010/11/12/…

标签: javascript google-analytics jslint jshint


【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    相关资源
    最近更新 更多