Dor*_*rad 5 javascript google-analytics
Google在" 将analytics.js添加到您的网站 "指南中提供以下代码段:
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
Run Code Online (Sandbox Code Playgroud)
这段代码是否初始化了Google Analytics?怎么样?
让我们分解一下
window.ga=
Run Code Online (Sandbox Code Playgroud)
正在ga为 windows 对象分配一个变量
window.ga||function(){...}
Run Code Online (Sandbox Code Playgroud)
由于短路,这将分配现有函数window.ga或调用该函数。这可以被认为是:
if(!window.ga){
window.ga = function(){...}
}
Run Code Online (Sandbox Code Playgroud)
这
(ga.q=ga.q||[])
Run Code Online (Sandbox Code Playgroud)
如上所述,如果数组尚不存在,则使用短路将数组分配给ga.q( )。windows.ga.q然后push arguments到这个数组。所以ga最终成为一个push将参数传入数组的函数。
那么它
ga.l=+new Date;
Run Code Online (Sandbox Code Playgroud)
这使用一元运算符ga.l=将日期 () 指定为数字 ( +new Date) 。
因此,这段代码最终创建了一个ga带有函数的对象,该函数在首次调用 ( q) 时创建一个空数组,然后推arguments送到该数组。它还创建一个日期整数 ( l)。
代码已被缩小到一行并减少其大小。它还以这样的方式编写:如果对象已经存在,则不会覆盖它。
为什么?嗯,我认为@Patricks 的回答涵盖了这一点