为什么在GA片段中使用1*new Date()而不是新的Date().getTime()?

Ser*_*rov 8 javascript google-analytics

我在我的TypeScript代码中插入GA片段并看到:

i[r].l = 1 * new Date();
Run Code Online (Sandbox Code Playgroud)

TypeScript编译器抱怨新的Date()必须是数字或任何,但不是Date.

我把它变成了这个:

i[r]['l'] = new Date().getTime();
Run Code Online (Sandbox Code Playgroud)

这导致相同的结果.

如果优先考虑减小尺寸,那么我发现这个更紧凑,给出了相同的结果:

i[r]['l'] = +new Date();
Run Code Online (Sandbox Code Playgroud)

我不知道为什么使用带隐式转换的smart-ass变体.

有什么隐藏我不明白或只是男人想要看起来更聪明?它是否缩短了它的长度?

Phi*_*ton 8

有什么隐藏我不明白......

不,这绝对是100%,只是为了缩短它的长度.

事实上,如果你看一下最新推荐的代码片段,它只使用+new Date,比你的+new Date()版本短两个字节:

<script>
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
ga('create', 'UA-XXXXX-Y', 'auto');
ga('send', 'pageview');
</script>
<script async src='https://www.google-analytics.com/analytics.js'> </script>
Run Code Online (Sandbox Code Playgroud)

确实,许多短信和代码构建工具会抱怨这些类型的实践,并且有充分的理由.您可能不应该在源代码中使用这样的聪明技巧,因为它们更难以阅读,并不总​​是清楚它们的意图,令人困惑等等.

然而,几乎所有的minifier 确实使用它们来生成最有效的代码,并且它们在技术上绝对没有任何问题.

关键是你应该编写可读代码,然后依赖于minifier /编译器,使其尽可能小而有效.

但是,Google Analytics不能仅仅假设每个使用其代码段的人都会通过缩小器运行它,因此它会为开发人员提供预先缩小的代码段.


处理源文件中包含预先缩小的代码并避免linter/compiler警告的最常见方法是忽略整个块,这是几乎每个linter提供的功能.

例如,使用ESLint,您可以通过在块之前和之后直接放置注释来忽略以下内容(我在很多人的Google Analytics代码段中看到的内容):

/*eslint-disable */
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
ga('create', 'UA-XXXXX-Y', 'auto');
ga('send', 'pageview');
/*eslint-enable */
Run Code Online (Sandbox Code Playgroud)