Задать вопрос
mbhusty
@mbhusty

Почему возникает ошибка Cannot read properties of null (reading 'hasOwnProperty')?

Привет! Есть следующий код:

addToWishlist(item) {
        window.dataLayer = window.dataLayer || [];
        window.dataLayer.push({ ecommerce: null });
        window.dataLayer.push({
            event: 'add_to_wishlist',
            ecommerce: {
                currency: 'RUB',
                value: item.price,
                items: [item]
            },
            'gtm-ee-event-category': 'Enhanced Ecommerce',
            'gtm-ee-event-action': 'Add to a Wishlist',
        });
    },


при его вызове, возникает ошибка Cannot read properties of null (reading 'hasOwnProperty'). Кто может подсказать почему?

Сам метод вызывается из компонента так

favoritesAction() {
this.addFavorites(this.item.id).then(() => {
            this.$analytics.ga4.addToWishlist(this.ga4Product);}
}


и ошибка именно в строке window.dataLayer.push({ ecommerce: null });
  • Вопрос задан
  • 339 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
Aetae
@Aetae Куратор тега JavaScript
Тлен
Ошибка точно не в этой строке, а в каком-то магическом коде.

Почему оно возникает?
С высокой вероятностью можно предположить, что:
1. window.dataLayer уже существует.
2. window.dataLayer.push переопределён или window.dataLayer является реактивным (vue?) массивом и отслеживает добавления.(что суть одно)
3. При push вызывается некая функция, которая без всяких проверок на то что значение не пустое делает условно так: puhedValue.ecommerce.hasOwnProperty(...) на чём благополучно и падает.

Что делать?
Не добавлять объект, в котором ecommerce: null, эта хрень ожидает, что ecommerce будет объектом и никак иначе.

Почему?
Хз, читайте доки, наверняка там описано как делать надо и не надо(ну или наоборот НЕ описано подобного варианта с null, что тоже вариант).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
NeiroNx
@NeiroNx
Программист
Иногда когда у вас есть глобальная переменная ecommerce то строка window.dataLayer.push({ ecommerce: null }); будет работать не так. Не экономьте кавычки.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы