我正在阅读有关 array destructuring 的信息和 spread syntax来自 MDN,我偶然发现了以下示例,尽管逐步阅读了这些 Material ,但它让我有点冷漠。
给我带来麻烦的代码是这样的:
function myFunction(v, w, x, y, z) { }
var args = [0, 1];
myFunction(-1, ...args, 2, ...[3]);
我明白了 v==-1
; w==0
; x==1
;和 y==2
... 但是 ...[3]
是什么?
示例来自上面的扩展语法超链接。
最佳答案
您找到的示例有点做作,您可能不会在实际代码中看到它。这只是为了说明扩展参数语法 ...
适用于任何可迭代表达式,包括标准数组文字,如 [1, 2, 3]
。 z
将是 3
因为
myFunction(-1, ...args, 2, ...[3]);
相当于
myFunction(-1, ...args, 2, 3);
...[
和 ]
在这种情况下基本上没有效果;这些值是从数组中提取出来的,所以就好像您只是将它们直接写在参数列表中一样。再举个例子,
myFunction(-1, ...args, 2, ...[3, 4, 5]);
相当于
myFunction(-1, ...args, 2, 3, 4, 5);
尽管 z
仍然是 3
(4
和 5
将被忽略,因为它们是意外的额外参数)。
让我们稍微分解一下:参数列表中展开/剩余语法...
的行为在section 12.3.6.1 "Runtime Semantics: ArgumentListEvaluation" 中定义。 ECMAScript 6 的。换句话说,它本质上是说“当您在参数列表中看到 ...X
时,评估 X
,然后遍历它包含的值并将每个值相加它们作为一个单独的论点”。
因此,当 JavaScript 在参数列表中看到 , 3
时,它会说“将 3
添加到参数列表”。
但是当 JavaScript 在参数列表中看到 , ...[3]
时,它会说“创建一个包含 3
的新数组,然后遍历它的每个值(仅 3
)并将它们添加到参数列表中。
您在这两种情况下都在做同样的事情,但更简单的方法可能更快。
关于javascript - 括号前的扩展运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44641088/