<br> window.dataLayer = window.dataLayer || [];<br> window.dataLayer.push({<br> event: 'pageView',<br> Page: 'trade',<br> Referral: window.location.href<br> });<br>
这段代码看不懂,大佬能帮忙解释一下吗?
“||”是js中的短路运算符;
如果“||”左边表达式转化为布尔值为true,则返回左边表达式的值;
如果“||”左边表达式转化为布尔值为false,则返回右边表达式的值
window.dataLayer = window.dataLayer || [];
假如 对象window.dataLayer(undefined 或 null)还没定义 则赋值为[]空数组
如果定义了 就直接重新赋值
这种处理一般用于标准初始化,以保证数据经过系列处理后有规范的格式(方便以后数据处理)。
这里用到了javascript 逻辑运算符 ||
的短路性质,即其左边表达式值为真时不进行后续处理,整个逻辑表达式值由前面部分值决定。
不过这个处理其实是有瑕疵的,更准确的处理是(比如window.dataLayer = flase,则值会被替换为[])。
window.dataLayer = window.dataLayer !== undefined ? window.dataLayer : [] ;
window.dataLayer = window.dataLayer || [];
dataLayer变量定义过就使用原来的,否则就赋值为[],防止后续的window.dataLayer.push出错
这种处理一般用于标准初始化,以保证数据经过系列处理后有规范的格式(方便以后数据处理)。
这里用到了javascript 逻辑运算符 ||的短路性质,即其左边表达式值为真时不进行后续处理,整个逻辑表达式值由前面部分值决定。
表达式A || 表达式B 的工作原理是:如果A的值为true(或A的值可以被当做为true)就返回A的值并且不执行表达式B,否则执行表达式B并且返回B的值
而是当表达式结果为false,0,"",null,undefined,NaN直接判断为假,其它的值都直接判断为真。
window.dataLayer = window.dataLayer || [];
等价于
window.dataLayer = window.dataLayer ? window.dataLayer : [];
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','GTM-PXC4DQ');
意思就是window.dataLayer如果不存在,就重新定义为一个数组[]