这个传播运算符为什么会崩溃运行时?
有一个更好的方法来问这个,但我只是不确定确切的原因。这个传播运算符为什么会崩溃运行时?
这是代码片段,我马上解构它。
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文件,运行时几乎立即崩溃,尽管它尚未被称为援引蔓延运营商[...
]意外。
您必须删除“...”,请尝试:
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;
};
它应该如何将数组元素放入单个函数参数中,删除'...'? – rsp
我觉得说“你必须删除'......'”在最坏情况下是无益的,错误的。特别是因为,你写它的方式,它将整个数组作为单个参数传递,而不是将其组件作为单独的参数传递。这正是我首先使用传播运算符的原因。 – Papayaman1000
我认为这是使用下划线作为一个变量名惩罚。但严重的是,看看你的代码似乎它应该工作,但只有当你的Node解释器是新的足以支持它。
要查看经营者传播的节点版本的支持,请参阅:
要在不支持它本身的平台上使用的现代语法,用巴贝尔:
当然,我们无法真正测试它,因为您没有提供可运行的示例。
但是你可以看到这样的回答:
,看看你是否可以在那里运行的例子。它使用扩展运算符,并且测试它是否正常工作。如果它在你的系统上运行,那么你应该能够使用扩展运算符。如果没有,那么你应该真的升级Node,因为没有理由使用这样一个过时的版本。
如果一切都失败了,那么你应该总是能够改变:
someFunction(...array);
到:
someFunction.apply(undefined, array);
请参阅该文档:
顺便说一句,我不确定你的意思是说一行“喜欢崩溃” - 它不会总是崩溃吗?这将是非常奇怪的。
我正在运行Node 7.8.0,所以它应该工作...嗯。我有点想避免'apply',因为它往往会对代码有一些非常粗糙的影响。 – Papayaman1000
@ Papayaman1000对于节点7.8.0,它应该可以工作。如果你提供了一个可运行的例子,那么有人可能会告诉你什么是错的。您的问题中的代码段无法运行以重现您的错误。 – rsp
我不知道除了整个文件的转储以外还提供什么。这是否合适/有用? – Papayaman1000
你能提供一个可运行的例子吗? –
你有什么版本的node.js? – Vovan