Почему child.getType () не делает то, что я ожидаю в DocumentApp? - PullRequest
0 голосов
/ 08 апреля 2020

Итак, в documentApp я могу запустить дочерние элементы документа следующим образом:

if (p.getType() == DocumentApp.ElementType.PARAGRAPH)
{
  console.log(i, " is a paragraph");}

И это прекрасно работает.

Но если я действительно попробую это:

if (p.getType() == DocumentApp.ElementType.PARAGRAPH)
{
  console.log(i, " is a paragraph");
} else {
console.log(i, p.getType());

Я получаю гигантскую структуру gibberi sh для p.getType (), а не просто для типа.

Как получить все типы в документе без структуры? Я не хочу создавать сложное дерево дел.

--- Результат, который я получаю -

Logging output too large. Truncating output. 37 { toString: [Function: toString],
  name: [Function: toString],
  toJSON: [Function: toString],
  ordinal: [Function: ordinal],
  compareTo: [Function: compareTo],
  AUTOGENERATED_REGION: 
   { toString: [Function: toString],
     name: [Function: toString],
     toJSON: [Function: toString],
     ordinal: [Function: ordinal],
     compareTo: [Function: compareTo],
     AUTOGENERATED_REGION: [Circular],
     BODY_SECTION: 
      { toString: [Function: toString],
        name: [Function: toString],
        toJSON: [Function: toString],
        ordinal: [Function: ordinal],
        compareTo: [Function: compareTo],
        AUTOGENERATED_REGION: [Circular],
        BODY_SECTION: [Circular],
        COMMENT_SECTION: [Object],
        DOCUMENT: [Object],
        EQUATION: [Object],
        EQUATION_FUNCTION: [Object],
        EQUATION_FUNCTION_ARGUMENT_SEPARATOR: [Object],
        EQUATION_SYMBOL: [Object],
        FOOTER_SECTION: [Object],
        FOOTNOTE: [Object],
        FOOTNOTE_SECTION: [Object],
        HEADER_SECTION: [Object],
        HORIZONTAL_RULE: [Object],
        INLINE_DRAWING: [Object],
        INLINE_IMAGE: [Object],
        LIST_ITEM: [Circular],
        PAGE_BREAK: [Object],

1 Ответ

1 голос
/ 08 апреля 2020

Когда вы вызываете getType() для потомка типа Element, вы получаете экземпляр ElementType.

ElementType является перечисляемым типом и при определенных обстоятельствах преобразуется в строку. Например, когда вы используете его в первом console.log(), оно соединяется со строкой " is a paragraph". При конкатенации строк метод toString() автоматически вызывается для экземпляра ElementType, а результирующая строка paragraph предварительно обрабатывается.

Со вторым вызовом console.log() все может стать странным теперь, когда мы по умолчанию на V8. В соответствии с документацией MDN :

Обратите внимание, что если вы регистрируете объекты в последних версиях Chrome и Firefox, то вы регистрируетесь на console - это ссылка на объект, которая не обязательно является «значением» объекта в тот момент, когда вы вызываете console.log (), но это значение объекта в момент, когда вы открываете консоль.

Итак, я предполагаю, что гиббери sh, который вы видите, является результатом console.log() попытки разрешить параметры своего объекта, но у него нет контекста для вывода конкатенации строк, поэтому в итоге вы получите конкатенацию ссылок на объекты (так как toString() вызовы не вызываются).

Что-то еще, что вы хотите иметь в виду. Перечислимые типы в основном являются одиночными, поэтому каждый экземпляр перечислимого типа является универсально уникальным объектом (например, существует только один экземпляр DocumentApp.ElementType.PARAGRAPH). Поэтому предпочтительно проверять равенство объектов с помощью оператора === вместо использования ==.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...