Object.keys(obj) возвращает элементы не в obj

Я пытаюсь вернуть все ключи моего объекта, чтобы создать строку заголовка в скрипте Google Apps. Это то, что возвращается, когда я console.info(obj):

{tagId=270, accountId=XXXXX, monitoringMetadata = {type=map}, firingTriggerId=[18], type=sp, containerId=XXXXX, workspaceId=XXXXX, name=GADR - Product Detail View - Product Detail Page, tagManagerUrl=https://tagmanager.google.com/#/container/accounts/XXX/containers/XXX/workspaces/XXX/tags/270?apiLink=tag, parameter=[{value = {{CJ - GADR SKU - Product Detail Page}}, type=template, key=eventItems}, {type=template, key=eventValue, value = {{DLV - Product Price - Product Detail Pages}}}, {value=true, key=enableDynamicRemarketing, type=boolean}, {type=list, key=customParams, list=[{map=[{type=template, key=key, value=product_name}, {key=value, type=template, value = {{DLV - Product Name - Product Detail Pages}}}], type=map}, {type=map, map=[{value=product_price, type=template, key=key}, {key=value, type=template, value = {{DLV - Product Price - Product Detail Pages}}}]}, {map=[{type=template, key=key, value=product_id}, {value = {{DLV - Product ID - Product Detail Pages}}, type=template, key=value}], type=map}, {map=[{value=product_category, type=template, key=key}, {value = {{DLV - Product Category - Product Detail Pages}}, key=value, type=template}], type=map}, {type=map, map=[{value=user_id, key=key, type=template}, {value = {{DLV - User ID - All Pages}}, type=template, key=value}]}, {map=[{value=user_status, type=template, key=key}, {type=template, value = {{DLV - User Status - All Pages}}, key=value}], type=map}, {type=map, map=[{value=page_type, type=template, key=key}, {key=value, value = {{DLV - Page Type - All Pages}}, type=template}]}, {map=[{type=template, value=user_purchase_count, key=key}, {key=value, type=template, value = {{DLV - User Purchase Count - All Pages}}}], type=map}, {type=map, map=[{value=user_lifetime_value, type=template, key=key}, {key=value, value = {{DLV - User Lifetime Value - All Pages}}, type=template}]}]}, {type=template, value=view_item, key=eventName}, {type=template, value = {{CST - Google Ads ID - All Pages}}, key=conversionId}, {type=template, value=USER_SPECIFIED, key=customParamsFormat}, {key=rdp, value=false, type=boolean}], tagFiringOption=oncePerEvent, path=accounts/XXX/containers/XXXX/workspaces/XXXX/tags/270, fingerprint=1608071670124}

И это то, что выводится, когда я console.info(Object.keys(obj));

[setMonitoringMetadataTagNameKey, setName, setTagFiringOption, setNotes, getMonitoringMetadata, tagId, firingTriggerId, getSetupTag, getFiringTriggerId, getName, name, getTagFiringOption, getParentFolderId, setWorkspaceId, containerId, getFingerprint, getTagManagerUrl, parameter, getBlockingTriggerId, setLiveOnly, setFingerprint, setTagManagerUrl, getContainerId, setScheduleEndMs, setTagId, getPaused, path, setContainerId, getLiveOnly, setFiringTriggerId, getBlockingRuleId, getFiringRuleId, getTagId, setTeardownTag, getTeardownTag, setFiringRuleId, getType, getPriority, accountId, setPaused, monitoringMetadata, setScheduleStartMs, getNotes, setParameter, toString, setParentFolderId, getPath, setSetupTag, fingerprint, setAccountId, getAccountId, workspaceId, setBlockingTriggerId, type, tagFiringOption, tagManagerUrl, getMonitoringMetadataTagNameKey, setPriority, setType, getScheduleEndMs, setBlockingRuleId, setPath, getParameter, getWorkspaceId, getScheduleStartMs, setMonitoringMetadata]

Я получаю все эти дополнительные ключи, которые начинаются с set и получают, которых нет в объекте, и я не могу понять, почему.

Где ваш минимально воспроизводимый пример?

Cooper 21.12.2020 18:07
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Эти ключи существуют в объекте, и поэтому они отображаются, когда эти ключи извлекаются с помощью Object.keys(). console.info() в Apps Script пытается преобразовать объект в строку (хотя и странным/нестандартным способом из-за пользовательской реализации в сценарии приложений), а stringify исключает функции, и поэтому они не отображаются, когда сценарий напрямую регистрируется с использованием console.info().

Вы можете перебрать объект и отфильтровать эти функции:

const keysWithoutFunctions = Object.keys(obj).filter(key => typeof obj[key] !== 'function')

Это сделало это! Это странно, потому что этих функциональных клавиш нет в документации Диспетчера тегов Google. Любой способ увидеть, что на самом деле содержит объект, включая все функции?

George 22.12.2020 19:26

@ Джордж Разве ты еще не видел это? Используете Object.keys()? Также смотрите developer.mozilla.org/en-US/docs/…

TheMaster 22.12.2020 19:28

Я вижу ключи, но не данные, связанные с этими ключами. Этих ключей нет в документации GTM, поэтому я не знаю, что это такое и зачем они там.

George 23.12.2020 02:52

@ Джордж Это функции. Вы можете получить доступ к методу, используя object[key], но вы все равно не сможете увидеть исходный код функции (хотя вы можете выполнить функцию: object[key](argument)). Судя по именам, они "геттеры и сеттеры".

TheMaster 23.12.2020 05:50

Другие вопросы по теме