javascript - 每个 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
解决方案
不要用于每个
来自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 循环已被弃用以获取迁移帮助。
推荐阅读
- angular - 如何在 *ngIf 中实现比较器编号
- java - Swing JList SetCellRenderer 背景颜色不起作用
- python - 从文本文件中解析特定数据
- sparse-matrix - 将稀疏矩阵分解的结果存储在 Eigen 中预先指定的内存位置
- javascript - 如果第二个数组包含具有不同值的相同对象,但主值除外,我如何更新第一个数组的对象
- python - 管理 AWS SQS 和 DLQ
- vba - 如何确保 Excel 读取数据并将其放入 SAP?
- sql - SQL:在 AND 子句中偶尔有 NULL 值的列
- php - 从数据库 PHP 将 html 渲染到页面
- hive - 在配置单元视图上检测到递归视图