Типы данных в Google Tag Manager

08 июля, 2022

Google Tag Manager - это инструмент, cозданный Google для управления различными HTML и JavaScript-тегами в удобном, интуитивно понятном интерфейсе. А поскольку большинство языков программирования содержат встроенные типы данных, то и диспетчер тегов Google поддерживает их. В этой статье разберем основные типы данных, которые вам неоднократно будет встречаться в процессе использования GTM.

Типы данных

В JavaScript есть 8 основных типов:

  1. number (число);
  2. bigint (целое число произвольной длины);
  3. string (строка);
  4. boolean (булев, логический тип)
  5. null (неизвестный, пустой тип);
  6. undefined (не было присвоено значение);
  7. object (объект);
  8. symbol (символ);

Все вышеперечисленные типы, кроме object, называются примитивами. Примитив – это данные, которые не являются объектом и не имеют методов. Все типы данных в JavaScript, кроме объектов, являются иммутабельными (значения не могут быть модифицированы, а только перезаписаны новым полным значением). Существует еще девятый тип данных - function (функция), специальный случай, упрощающий определение типа для функций несмотря на то, что все функции конструктивно унаследованы от object.

JavaScript является динамически типизированным языком. Это означает, что вам не нужно определять тип переменной заранее. Он определится автоматически во время выполнения программы. Также это означает, что одну и ту же переменную можно использовать для хранения данных различных типов. Например, в один момент переменная может принять строковое значение, а в другой – числовое:

С каждым из этих типов данных вы можете встретиться при работе с Google Tag Manager. Например, в режиме предварительного просмотра на вкладке Variables (Переменные) отображается список ваших переменных с определенными значениями для каждого события и типами данных:

Return Type в режиме отладки

Рассмотрим типы данных подробнее.

Примечание: все нижеописанные примеры вы можете легко воспроизвести в своем браузере в консоли разработчика (клавиша F12 для Google Chrome) на вкладке Console (Консоль).

Консоль разработчика

number (число)

Тип данных number (число) представляется в формате 64-битного числа двойной точности с плавающей запятой.

Числа в JavaScript могут иметь две формы:

  1. целые числа, например, 19. Мы можем использовать как положительные, так и отрицательные числа. Диапазон используемых чисел: от -253 до 253
  2. дробные числа (числа с плавающей точкой), например, 5.6675. Опять же можно использовать как положительные, так и отрицательные числа. Для чисел с плавающей точкой используется тот же диапазон: от -253 до 253

В качестве разделителя между целой и дробной частями, как и во многих языках программирования, в JavaScript используется точка:

Как правило, переменные с таким типом хранят в себе количественную информацию. Например: данные о стоимости товара, доставке, налоге, количестве товара, об итоговой сумме покупки и т.д. В Google Tag Manager переменные с числовым типом данных в режиме отладки подсвечиваются зеленым цветом:

Числа подсвечиваются зеленым цветом

Кроме обычных чисел, существуют так называемые специальные числовые значения, которые относятся к типу number: +Infinity (положительная бесконечность), -Infinity (отрицательная бесконечность) и NaN (Not-A-Number, не число).

Infinity представляет собой математическую бесконечность ∞. Получить его можно в результате деления на ноль:

Или задать явно:

Ноль в JavaScript имеет два представления: -0 и +0. (0 это синоним +0). На практике это имеет малозаметный эффект. Например, выражение +0 === -0 является истинным. Чтобы получить -∞ (-Infinity), достаточно число разделить на -0, а чтобы получить +∞ (Infinity), необходимо число разделить на +0:

NaN означает вычислительную ошибку. Чаще всего, это результат неправильной математической операции, проделываемой между двумя разными типами данных. Например, деление переменной со строковым значением на числовое является ошибкой:

Если где-то в математическом выражении есть NaN, то результатом вычислений с его участием будет NaN.

Существует множество операций для чисел, например, умножение *, деление /, сложение +, вычитание - и так далее. А также оператор typeof, который позволяет возвращать тип аргумента. Их мы рассмотрим чуть позже.

BigInt (целое число произвольной длины)

BigInt числа дают возможность работать с целыми числами произвольной длины, когда необходимо выйти за пределы 253 или -253.

Чтобы создать значение типа BigInt, необходимо добавить n в конец числового литерала или вызвать функцию BigInt, которая создаст число типа BigInt из переданного аргумента. Аргументом может быть число, строка и другие типы:

Google Tag Manager не поддерживает этот тип данных, поскольку использует изолированный JavaScript.

string (строка)

Любые текстовые данные в JavaScript являются строками (string). И вся текстовая информация должна быть заключена в кавычки:

В JavaScript используется три типа кавычек:

Двойные или одинарные кавычки являются простыми, между ними нет разницы в JavaScript. Единственное ограничение - тип закрывающей кавычки должен быть тот же, что и тип открывающей, то есть либо обе двойные, либо обе одинарные.

Обратные кавычки появились в стандарте ECMAScript 6 (ES6). Они позволяют встраивать выражения в строку, заключая их в ${…} В примере выше переменная variant3 примет значение У меня все хорошо привет, поскольку мы в ${…} использовали переменную variant1, которая равна слову привет. Выражение внутри ${…} вычисляется, и его результат становится частью строки.

Строковые переменные чаще всего встречаются в Google Tag Manager. В режиме отладки они подсвечиваются красным цветом:

Строковые данные подсвечиваются красным цветом

Все спецсимволы начинаются с обратного слеша \

Если внутри строки встречаются кавычки, то мы их должны экранировать слешем. Например, у нас есть текст "Tag Manager – инструмент компании "Google"". Теперь экранируем кавычки:

boolean (булев, логический тип)

Булевый тип (boolean) представляет логическую сущность и может принимать только два состояния: true (истина) и false (ложь).

Как правило, используется для хранения значений:

  • Да: true значит да, правильно;
  • Нет: false значит нет, не правильно.

В JavaScript boolean часто применяется для того, чтобы определить какие части кода выполнять (например, в операторах if) или повторять (например, циклы for). В Google Tag Manager логический тип используется в собственных переменных JavaScript и для запуска триггеров активации и блокировки. Например, можно выполнить проверку – зашел ли пользователь на сайт с мобильного устройства? Если да, то в переменную вернуть значение true. Если нет, то false.

Пример логического типа в Google Tag Manager

И далее уже выполнять различные команды в зависимости от полученного результата.

Булевые значения также могут быть результатом сравнений:

Подробную информацию о типах данных в JavaScript читайте на сайте javascript.ru и в официальной документации Mozilla.

null (неизвестный, пустой тип)

null (неизвестный, пустой тип) – это специальное значение, которое представляет собой ничего, пусто или значение неизвестно. Другими словами, переменная имеет некоторое неопределенное значение. Это не число, не строка, не логическое значение, но все-таки оно есть.

Если у вас есть переменная с типом null, и вам необходимо преобразовать ее в какое-нибудь другое значение, то это можно сделать с помощью Google Tag Manager и, например, пользовательской переменной типа Переменная JavaScript, выбрав в формате значения соответствующий параметр:

Настройки формата значений в переменных

undefined (значение не было присвоено)

Если переменная объявлена, но ей не присвоено никакого значения, то ее значением будет undefined.

Часто возникает путаница между null и undefined. Отличие заключается в том, что у переменной, которой присвоено значение null, есть некоторое неопределенное значение. А у undefined вообще нет никакого значения, мы только ее объявили.

null, преимущественно, используется для присвоения переменной пустого или неизвестного значения, а undefined - для проверок, была ли переменная назначена.

undefined может появляться в некоторых переменных при настройке в Google Tag Manager, а также тогда, когда вы выполнили какое-нибудь действие и в режиме предварительного просмотра просматриваете значения полученных переменных.

Пример значения undefined

Режим отладки GTM показывает значения переменных, которые существовали на момент совершения события. Если вы видите undefined, скорее всего, переменна на момент совершения события еще не была присвоена. Это распространенное явление, поскольку в диспетчере тегов мы настраиваем большое количество различных переменных, а значения им могут присваиваться только в момент совершения конкретного действия. В остальное время переменные будут существовать (объявлены, активированы), но значения им присвоены не будут.

Аналогично и с порядком активации событий. Например, если вы видите, что данные помещаются в уровень данных (dataLayer) после фрагмента контейнера Google Tag Manager (Container Loaded, gtm.js), то они не будут доступны для триггеров Просмотр страницы (All Pages). В этом случае вы должны использовать триггер Модель DOM готова (DOM Ready, gtm.dom) или Окно загружено (Window Loaded, gtm.load).

Если у вас есть переменная с изначальном типом undefined, и вам необходимо преобразовать ее в какое-нибудь другое значение, то это можно сделать, например, с помощью пользовательской переменной типа Переменная JavaScript, выбрав в формате значения соответствующий параметр:

Преобразование undefined в другое значение у переменной JavaScript

object (объект)

object (объект) – особенный тип данных, поскольку может использоваться для хранения набора свойств и более сложных объектов, а не только простых, примитивных значений, которые содержат в себе только что-то одно (будь то строка или число, или что-то еще).

В JavaScript объекты (ассоциативные массивы) используются очень часто. Объект может быть создан:

Вариант с фигурными скобками {…} еще называют литералом объекта или литеральной нотацией.

Свойство – это пара ключ:значение, где ключ – это строка или символ (также называемая именем свойства), а значение может быть любого типа данных. Свойства объекта также иногда называют полями объекта.

Например:

В объекте google находятся три свойства:

  1. Первое свойство с именем "founder1" и значением "Larry";
  2. Второе свойство с именем "founder2" и значением "Sergey";
  3. Третье свойство с именем "age" и значением 1998.

Имя свойства может состоять из нескольких слов, но тогда оно должно быть заключено в кавычки:

Последнее свойство объекта может заканчиваться запятой:

Это называется висячая запятая. Такой подход упрощает добавление, удаление и перемещение свойств, так как все строки объекта становятся одинаковыми.

Мы можем записать объект таким образом, что ключ будет иметь несколько значений. Например, вот так:

Получить значение свойства можно с помощью операторов точки . (так называемая точечная нотация, точечная запись) или квадратных скобок [] (так называемая скобочная нотация, скобочная запись) и кавычек (подойдет любой тип кавычек).

Для получения доступа к значению в массиве используются квадратные скобки, за которыми следует номер позиции. Чтобы получить значение "Sergey", нам необходимо написать так:

В квадратных скобках идет номер позиции [1], поскольку массивы в JavaScript индексируются с нуля: первый элемент массива имеет индекс, равный 0, а индекс последнего элемента равен значению свойства массива length минус 1 (length-1).

Объекты можно помещать в другие объекты. Например:

Здесь объект data с 4 ключами (owner, commercial, url, launched) помещен в другой объект analytics. Получить значение свойства объекта внутри другого объекта можно также с помощью точечной нотации (оператора точки) или квадратных скобок.

Используя object, вы можете создать массив с данными для отслеживания различных событий электронной торговли или динамического ремаркетинга, например: просмотр товара, добавление/удаление товаров из корзины, покупка и т.д.

Пример объекта

В JavaScript есть другие типов объектов:

  • Array для хранения упорядоченных коллекций данных,
  • Date для хранения информации о дате и времени,
  • Error для хранения информации об ошибке.

Формально они не являются отдельными типами, а относятся к типу данных object. Они лишь расширяют его различными способами. Google Tag Manager также будет их корректно определять. Например, array:

Пример массива

symbol (символ)

Символ (symbol) – одно из нововведений в стандарте ECMAScript 6 (ES6), примитивный тип данных, представляющий собой неизменяемый, уникальный идентификатор. Символы создаются с помощью функции Symbol():

При создании символу можно дать описание (необязательный параметр), в основном использующееся для отладки кода:

Важной особенностью символа также является то, что его значение уникально. Вы можете использовать символ как имя свойства, которое гарантированно не будет повторяться с любым другим свойством. Даже, если у двух символов одинаковое имя, то это не значит, что они равны:

На примере выше два символа с одинаковым описанием, но они не равны. Символы в JavaScript используются для безопасного добавления нового функционала в программу, а также для защиты от совпадения имен с уже существующими объектами. Подробнее о данном типе данных вы можете прочитать в этой статье.

В Google Tag Manager я пока не встречал задач, связанных с использованием данного типа данных. Сам GTM в режиме предварительного просмотра определяет symbol как object:

Пример символа

Данный материал - отрывок из электронного руководства по Google Tag Manager (2020).

Получайте бесплатные уроки и фишки

По контекстной, таргетированной рекламе и аналитике