我可以在不使用.push的情况下在Google Datalayer对象上设置属性吗?

问题描述

Google Datalayer documentation建议将数据推送到对象上。但是我想知道如果我覆盖现有属性或在脚本中的对象上设置新属性将被认为是有效的并且可以得到正确评估。例如,我的主页已加载,并且在我的头部:

<script>window.datalayer = window.datalayer || []; 
datalayer.push({'event': 'my event'}); </script>

然后在后续脚本中,我以以下方式使用lodash设置:

  <script>_.set(window.datalayer,'0.page.pageType',"someType"); </script>

将datalayer对象更改为:

{
  "event": "my event","page": {
    "pageType": "someType"
   }
}

这会有效吗?信息将正确传达给Google平台。

解决方法

dataLayer实际上是一个对象数组,用于保持数据的更改历史记录。因此,当您执行dataLayer.push()时,实际上是在此历史记录中添加了一个额外的元素。

从技术上讲,您可以跟踪所有参数并模仿相同的结果,但是所提供的代码无效。

该数组中的示例对象:

event: "gtm.timer"
gtm.timerCurrentTime: 1602085776920
gtm.timerElapsedTime: 30004
gtm.timerEventNumber: 1
gtm.timerId: 99
gtm.timerInterval: 30000
gtm.timerLimit: 10
gtm.timerStartTime: 1602085746916
gtm.triggers: "440772_256"
gtm.uniqueEventId: 286