这个传播运算符为什么会崩溃运行时?

问题描述:

有一个更好的方法来问这个,但我只是不确定确切的原因。这个传播运算符为什么会崩溃运行时?

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

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

+0

你能提供一个可运行的例子吗? –

+0

你有什么版本的node.js? – Vovan

您必须删除“...”,请尝试:

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; 
}; 
+0

它应该如何将数组元素放入单个函数参数中,删除'...'? – rsp

+1

我觉得说“你必须删除'......'”在最坏情况下是无益的,错误的。特别是因为,你写它的方式,它将整个数组作为单个参数传递,而不是将其组件作为单独的参数传递。这正是我首先使用传播运算符的原因。 – Papayaman1000

我认为这是使用下划线作为一个变量名惩罚。但严重的是,看看你的代码似乎它应该工作,但只有当你的Node解释器是新的足以支持它。

要查看经营者传播的节点版本的支持,请参阅:

要在不支持它本身的平台上使用的现代语法,用巴贝尔:

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

但是你可以看到这样的回答:

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

如果一切都失败了,那么你应该总是能够改变:

someFunction(...array); 

到:

someFunction.apply(undefined, array); 

请参阅该文档:

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

+0

我正在运行Node 7.8.0,所以它应该工作...嗯。我有点想避免'apply',因为它往往会对代码有一些非常粗糙的影响。 – Papayaman1000

+0

@ Papayaman1000对于节点7.8.0,它应该可以工作。如果你提供了一个可运行的例子,那么有人可能会告诉你什么是错的。您的问题中的代码段无法运行以重现您的错误。 – rsp

+0

我不知道除了整个文件的转储以外还提供什么。这是否合适/有用? – Papayaman1000