1

这是我试图在谷歌表格脚本中运行的简单代码。目的是为foreach回调函数提供附加参数。

function print(str, num) {
    Logger.log(str + ": " + num);
}

function test()
{
  var array = [1,2,3];
  var str = "Stam";
  //This line has an exception
  // TypeError: Cannot convert null to an object
  array.forEach(print.bind(null, str));
}
test();

此代码基于此处描述的解决方案。

我知道还有其他解决方案,但我想了解为什么这个不起作用。

我想也许谷歌表格不支持它。

4

1 回答 1

3

这个答案怎么样?请认为这只是几个可能的答案之一。

在 Javascript 中,使用nullofbind(null, str)this使用。在 Google Apps 脚本中,当null用于时bind(null, str),会出现“无法将 null 转换为对象”之类的错误。我认为这可能是谷歌方面的规范。我不确定这是否在未来的更新中被修改。因此,作为当前的解决方法,使用this而不是如何null?或者如果你想在严格模式下使用bind(null, str)like ,使用而不是like怎么样?null{}nullbind({}, str)

顺便说一句,我认为test();可以删除脚本的最后一行。因为在您的情况下,当test()在脚本编辑器中运行时,在最后一行test()运行 2 次。在最后一行作为全局运行。test();test();

从上面的情况来看,当你的脚本被修改时,下面的修改呢?

修改后的脚本:

function print(str, num) {
  Logger.log(str + ": " + num);
}

function test() {
  var array = [1,2,3];
  var str = "Stam";
  array.forEach(print.bind(this, str));
}

或者您也可以test()按如下方式修改您的脚本。以下test()检索与上述结果相同的结果。

function test() {
  var array = [1,2,3];
  var str = "Stam";
  array.forEach(function(e) {print(str, e)});
}

结果:

在脚本编辑器中运行test()时,您可以在日志中看到以下结果。

Stam: 1
Stam: 2
Stam: 3

参考:

如果我误解了您的问题并且这不是您想要的方向,我深表歉意。

于 2020-01-07T23:10:01.710 回答