我已尝试通过http://codebeautify.org/jsvalidate让Google Analytics进行验证,但我得到的错误只有一个:意外' 1'。它发生在这一行:
i[r].l = 1 * new Date();
不是1 *冗余吗?为什么GA有这个?删除该部分代码是否安全?万一你想要它,这里是我的完整代码:
/*global document, ga, window */
(function (i, s, o, g, r, a, m) {
'use strict';
i.GoogleAnalyticsObject = r;
i[r] = i[r] || function () {
i[r].q = i[r].q || [];
i[r].q.push(arguments);
};
i[r].l = 1 * new Date();
a = s.createElement(o);
m = s.getElementsByTagName(o)[0];
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m);
}
(window, document, 'script', '//google-analytics.com/analytics.js', 'ga'));
ga('create', 'UA-XXXXXXXX-X', 'auto');
ga('require', 'displayfeatures');
ga('send', 'pageview');
答案 0 :(得分:3)
如下面的问题所解释的那样"乘法(或任何算术运算)会导致Date对象转换为数字,以便评估表达式"
奇怪的是,似乎是将一个新的Date对象乘以一个整数,这就是我有资格作为javascript的怪癖。做" 1 *新日期()"相当于使用.getTime()。
代码很好,你收到错误的原因是因为解析器来自 http://codebeautify.org/jsvalidate并不支持这个怪癖。
您可以立即打开控制台并键入console.log(1 * new Date())来轻松测试;您将获得自1970年1月1日以来的毫秒数。但是如果您在验证器中粘贴相同的一行代码,则会产生相同的错误。
答案 1 :(得分:2)
实际上,新的Date()和1 * new Date()之间存在差异:
new Date()返回日期对象,1 * new Date()返回时间戳,以毫秒为单位。试试吧!
var date = 1 * new Date();
var date2 = new Date();
alert("milliseconds: " + date + " and object: " + date2);
所以我不会删除1 *,因为看起来GA使用的是毫秒时间戳。保持原样。