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 的回答涵盖了这一点