为什么这个扩展运算符会崩溃运行时?

时间:2017-04-24 12:28:23

标签: javascript node.js cloud9-ide cloud9

要问这个问题还有更好的方法,但我不确定原因。

首先是代码片段,我马上解构它。

this.argArr = [['arg1', 'arg2'], ['foo', 'bar'], ['you get ', 'the point']];

this.evalArgsFromArr = function () {
  var out = [];
  for (var _ = 0; _ < parent.argArr.length; _++) {
    out.push(someFunction(...parent.argArr[_])); // This part crashes
  }
  return out;
};

当然,这个功能是一个对象的一部分。

这个想法是,parent.argArr中的每个项都应该是一个数组,包含someFunction()的两个参数,它们也可以方便地用作输出的人类可读的缩写。我的理解是,在可迭代对象(例如存储在parent.argArr中的数组)上使用,扩展运算符分别输出每个单独的值。 (例如,for循环的第一次运行应输出someFunction('arg1', 'arg2')。)

每当我在Node.js或PHP中运行包含此文件的文件时,运行时几乎立即崩溃,尽管它尚未被调用,引用扩展运算符[...]为意外。

以下是错误消息,如果有帮助: Error Message

2 个答案:

答案 0 :(得分:4)

我认为这是对使用下划线作为变量名称的惩罚。但严重的是,查看您的代码似乎应该可以正常工作,但前提是您的Node解释器足够新以支持它。

要在Node版本中查看spread运算符的支持,请参阅:

要在不支持本机的平台上使用现代语法,请使用Babel:

当然我们无法真正测试它,因为你没有提供一个可运行的例子。

但你可以看到这个答案:

看看你是否可以在那里运行示例。它使用扩展运算符,如果测试它正常工作。如果它在您的系统上运行,那么您应该能够使用扩展运算符。如果没有那么你应该真正升级Node,因为没有理由使用这样一个过时的版本。

如果所有其他方法都失败了,那么您应该始终能够改变:

someFunction(...array);

为:

someFunction.apply(undefined, array);

参见文档:

顺便说一句,我不确定你的意思是说一行“喜欢崩溃” - 它不会一直崩溃吗?这将是非常奇怪的。

答案 1 :(得分:-1)

您必须删除&#34; ...&#34;,尝试:

this.argArr = [['arg1', 'arg2'], ['foo', 'bar'], ['you get ', 'the point']];

this.evalArgsFromArr = function () {
  var out = [];
  for (var _ = 0; _ < parent.argArr.length; _++) {
    out.push(someFunction(parent.argArr[_]));
  }
  return out;
};