46

ECMAScript 规范SpreadElement描述了

SpreadElement[Yield]:
...AssignmentExpression[In, ?Yield]

这和Spread语法一样吗

扩展语法允许在预期零个或多个参数(对于函数调用)或元素(对于数组字面量)的地方扩展诸如数组表达式或字符串之类的可迭代对象,或者在零个或多个参数的地方扩展对象表达式键值对(用于对象文字)是预期的。

句法

对于函数调用:

myFunction(...iterableObj);

对于数组文字:

[...iterableObj, 4, 5, 6]

MDN文档中描述?

SpreadElement和,或,传播语法的用例是什么?ifSpreadElement和 spread 语法不同,它们在哪些具体方式上有所不同?

4

3 回答 3

102
于 2016-05-11T03:15:18.467 回答
1

SpreadElement只是 ES6 语法中的一个名称,用于在数组字面量中传播“运算符”及其参数:

SpreadElement[Yield]:
    ... AssignmentExpression[In, ?Yield]

所以,SpreadElement[a, b, ...c]...c;传播“运算符”是...。(吓人的引号,因为它不是一个真正的运算符,与 eg-是相同的。)

函数调用中使用的语法规则的名称会有所不同,因为它是不同的语法上下文(它只是一种ArgumentList)。

于 2016-05-11T02:19:22.467 回答
0

另一个用例是替代 Object.assign 方法:

// 天真的使用 assign--覆盖 o 中的共享属性:

Object.assign(o, defaults); 

/* non-naive use of assign—prevents shared properties in o from being 
   overwritten */ 
o = Object.assign({}, defaults, o);  

或者,使用扩展运算符:

o = {...defaults, ...o} 

这是 ES2018 中最重要的功能之一

let position = { x: 0, y: 0 };  
let dimensions = { width: 100, height: 75 };  
let rect = { ...position, ...dimensions };  
rect.x + rect.y + rect.width + rect.height // => 175 

-MDA

于 2022-01-14T23:57:08.110 回答