【发布时间】:2018-12-21 00:20:50
【问题描述】:
我不是 100% 清楚这段代码是如何工作的:
var a = [1, 2, 3];
[x, y, ...a ] = [0, ...a, 4];
// OUTPUT: [0, 1, 2, 3, 4]
我正在使用 ... 运算符解构数组 a。
我期待在第二行会发生一堆作业。
x 将被分配给 0,y 将被分配给 ...a(它将数组 a 中的元素作为单独的值传递)。
不过,我不清楚 ...a 是如何分配给 4 的。事实上,JS 在这样做时会抛出异常:
...a = 4;
// Uncaught SyntaxError: Rest parameter may not have a default initializer
为什么这段代码输出修改后的数组以4结尾,而不是抛出异常?这究竟是如何工作的?
【问题讨论】:
-
“
...a如何分配给4” 它没有。什么让你有那个想法?您看到的输出是评估[0, ...a, 4]的结果。[x, y, ...a ] = foo表示“将可迭代foo的第一个值分配给x,第二个分配给y,其余作为数组分配给a”。 -
我明白了。现在可以理解为什么
a的输出是[2, 3, 4]。
标签: javascript arrays destructuring