你找到的例子有点琐碎,你可能不会在真实代码中看到它。这只是为了说明扩展参数语法...
适用于任何可迭代表达式,包括像[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 section 12.3.6.1 "Runtime Semantics: ArgumentListEvaluation"定义套用的行为,它本质上说,“当你在一个参数列表中看到...X
,评估X
,然后检查它包含的值并将它们中的每一个作为单独的参数添加“。
因此,当JavaScript在参数列表中看到, 3
时,它说“将3
添加到参数列表”。
但当看到的JavaScript在, ...[3]
参数列表,它说:“创建一个包含3
一个新的数组,然后通过它的每一个值(仅3
),并将它们添加到参数列表”。
在这两种情况下你都做了同样的事情,但更简单的方法可能会更快。
这只是一个数组文字。想'var args2 = [3];'和'... args2'。 – Bergi
谢谢我惊慌失措,过早地发布了一些问题。一个积极的事情是,我了解到,您可以以这种方式复制没有分片的数组:var arr = [1,2,3]; var arr2 = [... arr]; //像arr.slice() – alexandros84
['...'不是运算符!](https:// stackoverflow。com/questions/37151966 /什么是spreadelement-in-ecmascript-documentation-it-the-same-as-spread-oper/37152508#37152508) –