首页 > 解决方案 > 每个 Google Apps 脚本都会导致错误,但不会

问题描述

我有一个简单的 Google Apps 脚本代码,如下所示:

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循环,另一个使用for each循环。

的日志输出throwsError()如下:

图片

我的数组中似乎只有 3 个项目sliceArr,但containsThread被调用了 4 次。(此外,它似乎第四次将containsThread函数作为参数传递给自身)。有什么想法可能导致这种情况吗?

我的倾向是这是 Google Apps 脚本的一个错误,但我想在这里检查一下,以防其他人有一些见解。请注意,Google Apps 脚本适用于 JS 1.6,其中某些部分是 1.7 和 1.8

标签: javascriptarraysgoogle-apps-scriptforeach

解决方案


不要用于每个

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

作为 ECMA-357 (E4X) 标准的一部分,不推荐使用 for each...in 语句。E4X 支持已被删除。考虑使用 for...of 代替。

Firefox 现在对 for each...in 的使用发出警告,并且从 Firefox 57 开始不再有效。

请参阅警告:JavaScript 1.6 的 for-each-in 循环已被弃用以获取迁移帮助。


推荐阅读