在ECMAScript规范中进行了SpreadElement描述
SpreadElement
SpreadElement[Yield]: ...AssignmentExpression[In, ?Yield]
这和Spread语法一样吗
扩展语法允许将迭代式(例如数组表达式或字符串)扩展到期望零个或多个参数(用于函数调用)或元素(用于数组文字)的位置,或将对象表达式扩展在零个或多个位置键值对(用于对象文字)是必需的。 句法 对于函数调用: myFunction(...iterableObj); 对于数组文字: [...iterableObj, 4, 5, 6]
扩展语法允许将迭代式(例如数组表达式或字符串)扩展到期望零个或多个参数(用于函数调用)或元素(用于数组文字)的位置,或将对象表达式扩展在零个或多个位置键值对(用于对象文字)是必需的。
句法
对于函数调用:
myFunction(...iterableObj);
对于数组文字:
[...iterableObj, 4, 5, 6]
在MDN文档中有描述?
SpreadElement和,或,扩展语法的用例是什么?如果SpreadElement和传播语法不同,它们在哪些特定方式上有所不同?
这是错误的,因为...它不是运算符(至少在ECMAScript规范使用术语“运算符”的意义上如此)。它不会 生成 可用于进一步计算的值。我宁愿将其与其他标点符号进行比较,例如,或;(它们也是相关的,但在不同上下文中具有不同的含义)。
...
,
;
术语“扩展运算符”可以指:
Spread元素var arr = [a, b, ...c];: Spread元素将iterable(c)扩展为新数组。等同于[a,b].concat(c)。
var arr = [a, b, ...c]
c
剩余元素[a, b, ...c] = arr;†:在解构内部,...构造具有相反的效果:它将剩余元素收集到数组中。这里的示例等效于
[a, b, ...c] = arr;
a = arr[0]; b = arr[1]; c = arr.slice(2);
(请注意,这只是一个近似值,因为解构作用于任何可迭代的值,而不仅仅是数组)
fun(a, b, …c):这个结构实际上在规范中没有名字。但是它的工作原理与传播元素非常相似:它将可迭代项扩展到参数列表中。 等同于func.apply(null, [a, b].concat(c))。
func.apply(null, [a, b].concat(c))
缺少正式名称可能是人们开始使用“扩展运算符”的原因。我可能会称其为“扩展参数”。
Rest参数:function foo(a, b, ...c)与rest元素类似,rest参数收集传递给函数的其余参数,并将其作为in中的数组使用c。ES2015规范实际上使用该术语BindingRestElement来指代此构造。
function foo(a, b, ...c)
BindingRestElement