我正在从 MDN 阅读有关 数组解构 和 扩展语法 的信息,我偶然发现了以下示例,尽管我逐步浏览了这些材料,但它还是让我有点冷淡。
给我带来麻烦的代码是这样的:
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
将被忽略,因为它们是意外的额外参数)。
让我们稍微分解一下:参数列表中展开/休息语法
...
的行为在 ECMAScript 6 的第 12.3.6.1 节“运行时语义:ArgumentListEvaluation” 中定义。换句话来说,它本质上是说“当您在参数列表中看到 ...X
,评估 X
,然后遍历它包含的值并将每个值添加为单独的参数”。
因此,当 JavaScript 在参数列表中看到
, 3
时,它会说“将 3
添加到参数列表中”。
但是当 JavaScript 在参数列表中看到
, ...[3]
时,它会说“创建一个包含 3
的新数组,然后遍历它的每个值(仅 3
)并将它们添加到参数列表中”。
在这两种情况下你都在做同样的事情,但更简单的方法可能更快。