Google Apps Script для каждой причины ошибки, но не для

У меня есть простой код Google Apps Script, как этот:

function throwsError(){
  var inboxThreads = GmailApp.getInboxThreads();
  var sliceArr = inboxThreads.slice(0, 3);
  Logger.log(sliceArr.length);

  for each (var thread in sliceArr){
    Logger.log(inboxThreads.containsThread(thread));
  }
}

function doesNotThrowError(){
  var inboxThreads = GmailApp.getInboxThreads();
  var sliceArr = inboxThreads.slice(0, 3);
  Logger.log(sliceArr.length);

  for (var i = 0; i < sliceArr.length; i++){
    Logger.log(inboxThreads.containsThread(sliceArr[i]));
  }
}

Array.prototype.containsThread = function(thread){
  Logger.log("Here");
  Logger.log(thread);
  return this.filter(function(t){ return t.getId() == thread.getId(); }).length > 0;
}

Как показывают имена функций, throwsError() выдает ошибку TypeError: Cannot find function getId in object function (thread) {...}. , doesNotThrowError() работает без проблем. Единственная разница между ними заключается в том, что один использует цикл for а другой - цикл.

Вывод журнала throwsError() выглядит следующим образом:

образ

Кажется, что в моем массиве sliceArr есть только 3 элемента, но containsThread вызывается 4 раза. (Кроме того, в четвертый раз кажется, что она передает функцию containsThread в себя в качестве параметра). Есть идеи, что может быть причиной этого?

Я склоняюсь к тому, что это ошибка в Google Apps Script, но я хотел бы проверить здесь, есть ли у кого-то еще понимание. Обратите внимание, что Google Apps Script работает на JS 1.6 с некоторыми частями 1.7 и 1.8.

Всего 1 ответ


Не используйте для каждого

Из https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for_each...in

Оператор for each ... in считается устаревшим как часть стандарта ECMA-357 (E4X). Поддержка E4X была удалена. Попробуйте использовать для ... вместо.

Firefox теперь предупреждает об использовании для каждого ... in и больше не работает, начиная с Firefox 57.

Пожалуйста, ознакомьтесь с разделом Предупреждение: циклы JavaScript 1.6 for-each-in устарели для справки по миграции.


Есть идеи?

10000