gue*_*314 42 javascript ecmascript-6 spread-syntax
SpreadElement[Yield]:
...AssignmentExpression[In, ?Yield]
Run Code Online (Sandbox Code Playgroud)
这与Spread语法相同
扩展语法允许在可能需要零个或多个参数(用于函数调用)或元素(用于数组文字)的位置扩展数组表达式或字符串等可迭代的值,或者在零或更多的位置扩展对象表达式键值对(对象文字)是预期的.
句法
对于函数调用:
Run Code Online (Sandbox Code Playgroud)myFunction(...iterableObj);
对于数组文字:
Run Code Online (Sandbox Code Playgroud)[...iterableObj, 4, 5, 6]
在MDN文档中描述?
什么是SpreadElement
和/或扩展语法的用例; 如果SpreadElement
和传播语法不同,它们的具体方式有何不同?
Fel*_*ing 85
术语"传播运算符"是一种"总称术语",指的是ES6中的各种句法结构,它们都是如此...x
.MDN也是如此.
然而,这是误导,因为...
不是运算符(至少在某种意义上ECMAScript规范使用术语"运算符").它不会生成可用于进一步计算的值.我宁愿把它与其他标点符号比较,比如,
或;
(它们也有点相关,但在不同的语境中有不同的含义).
术语"传播运营商"可以指:
Spread元素var arr = [a, b, ...c];
:spread元素将iterable(c
)扩展为新数组.它相当于类似的东西[a,b].concat(c)
.
Rest元素,[a, b, ...c] = arr;
†:在内部解构中,...
构造具有相反的效果:它将剩余的元素收集到一个数组中.这里的例子相当于
a = arr[0];
b = arr[1];
c = arr.slice(2);
Run Code Online (Sandbox Code Playgroud)
(请注意,这只是一个近似值,因为解构适用于任何可迭代值,而不仅仅是数组)
fun(a, b, ...c)
:此构造实际上在规范中没有名称.但它与spread元素的工作方式非常相似:它将一个iterable扩展为参数列表.
这相当于func.apply(null, [a, b].concat(c))
.
缺乏官方名称可能是人们开始使用"传播运营商"的原因.我可能会称之为"传播论证".
Rest参数::function foo(a, b, ...c)
类似于rest元素,rest参数收集传递给函数的其余参数,并使它们可用作数组c
.ES2015实际规范使用该术语BindingRestElement
来指代此构造.
相关问题:
†:根据规范,如果我们非常迂腐,我们甚至必须区分变量声明(var [a, b, ...c] = d;
)和简单赋值([a, b, ...c] = d;
).
归档时间: |
|
查看次数: |
3733 次 |
最近记录: |