【问题标题】:Google Apps Script for each causes error, but for does not每个 Google Apps 脚本都会导致错误,但不会
【发布时间】:2019-05-17 15:38:00
【问题描述】:

我有一个简单的 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()的日志输出如下:

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

我的倾向是这是 Google Apps 脚本的一个错误,但我想在这里检查一下,以防其他人有一些见解。请注意,Google Apps 脚本 works on JS 1.6 with some portions of 1.7 and 1.8

【问题讨论】:

  • for each (var thread in easyThreads) 无法为我编译。不应该是for (var thread in easyThreads)吗?或者这可能是 Google Apps 脚本所特有的......
  • @SteveO'Connor 我认为这是 Google Apps 脚本特有的
  • @SteveO'Connor 我只是将我的问题更改为具有最少的可重复步骤(基本上,没有“easyLabel”要求)
  • 不要使用for each in,句号。

标签: javascript arrays google-apps-script foreach


【解决方案1】:

不要对每个都使用

来自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 开始不再有效。

请参阅Warning: JavaScript 1.6's for-each-in loops are deprecated 获取迁移帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多