Javascript ECMAScript文档中的SpreadElement是什么?它与MDN的扩展语法相同吗?
最后,描述了Javascript ECMAScript文档中的SpreadElement是什么?它与MDN的扩展语法相同吗?,javascript,ecmascript-6,spread-syntax,Javascript,Ecmascript 6,Spread Syntax,最后,描述了 SpreadElement[Yield]: ...AssignmentExpression[In, ?Yield] 这和那个一样吗 扩展语法允许在预期零个或多个参数(用于函数调用)或元素(用于数组文字)的位置展开iterable,例如数组表达式或字符串,或者在预期零个或多个键值对(用于对象文字)的位置展开object表达式 语法 对于函数调用: myFunction(...iterableObj); 对于数组文字: [...iterableObj, 4, 5, 6] 在文档中
SpreadElement[Yield]:
...AssignmentExpression[In, ?Yield]
这和那个一样吗
扩展语法允许在预期零个或多个参数(用于函数调用)或元素(用于数组文字)的位置展开iterable,例如数组表达式或字符串,或者在预期零个或多个键值对(用于对象文字)的位置展开object表达式
语法
对于函数调用:
myFunction(...iterableObj);
对于数组文字:
[...iterableObj, 4, 5, 6]
在文档中描述
SpreadElement
和或spread语法的用例是什么;如果SpreadElement
和spread语法不同,它们在哪些具体方式上有所不同?SpreadElement
在ES6语法中只是spread“operator”的一个名称,当它位于数组文字中时,它的参数是:
SpreadElement[Yield]:
... AssignmentExpression[In, ?Yield]
因此,[a,b,…c]
中的元素是…c
;排列“运算符”是…
。(害怕引用,因为它不是真正的运算符,例如,-
是。)
函数调用中使用的语法规则的名称将不同,因为它是不同的语法上下文(它只是一种参数列表)。术语“扩展运算符”是一种“伞形术语”,指ES6中的各种语法结构,它们看起来都像…x
。MDN也这样做
但是,这是误导,因为…
不是运算符(至少在ECMAScript规范使用术语“运算符”的意义上不是)。它不会生成可用于进一步计算的值。我宁愿将它与其他标点符号进行比较,例如、
或代码>(也有点相关,但在不同的上下文中有不同的含义)
术语“差价经营者”可指:
- :扩展元素将iterable(
c
)扩展到新数组中。它相当于类似于[a,b].concat(c)
- †:在解构内部,
..
构造具有相反的效果:它将剩余元素收集到一个数组中。这里的例子相当于
a = arr[0];
b = arr[1];
c = arr.slice(2);
(请注意,这只是一个近似值,因为解构作用于任何iterable值,而不仅仅是数组)
fun(a,b,…c)
:这个构造。但它的工作原理与扩展元素非常相似:它将iterable扩展到参数列表中。
它相当于func.apply(null[a,b].concat(c))
缺少正式名称可能是人们开始使用“spread operator”的原因。我可能会称之为“扩散争论”
- :与rest元素类似,rest参数收集传递给函数的剩余参数,并使它们在
c
中作为数组可用。ES2015规范实际上使用术语BindingRestElement
来指代此构造
相关问题:
†:如果我们非常迂腐,我们甚至必须区分变量声明(var[a,b,…c]=d;
)和简单赋值([a,b,…c]=d;
),根据规范。“SpreadElement
只是ES6语法中省略运算符的一个名称”什么是“省略运算符”,SpreadElement
是ES6规范中的一条语法规则,正如我在上面所解释的,它涵盖的不仅仅是…
操作符。MDN将…
称为“操作员”,因为上下文中的意思很清楚,只有学究才会坚持语法结构或其他什么。你在玩游戏吗?“为什么MDN使用术语操作符?”上面回答:“MDN将…
称为“操作符”,因为上下文中的意思很清楚,只有学究才会坚持句法结构或其他东西。”。“SpreadElement还包括哪些内容?”上面回答:“中的SpreadElement
是…c
;spread”操作符“是…
”。“什么是‘书呆子’?”找一本字典。@guest271314-ECMA-262是语言规范,所以它是权威。MDN是一个任何人都可以贡献的公共wiki,它不是任何事情的权威。对于记录(和学究),..
是构成SpreadElement一部分的标记。@guest271314:您可能想看看关于..
标记如何构成运算符的注释。对于函数调用,我个人会说它的REST参数,而不是spread运算符。然而,它们的用途和实现方式几乎相同。@choz:Eh,如果我们想更准确地说,它应该在调用中传播,其余的在定义中:x=f(a,…b)
传播b
,函数f(a,…b)
将其余的参数收集到b
。与数组相同:在文本x=[a,…b]
中,它是分散的,在解构赋值[a,…b]=x
中,它是剩余的。@Amadan在x=f(a,…b)
中,b
必须是一个iterable对象。我认为这仍然是所谓的。函数f(a,…b)
,使得b
必须排在最后,并且能够包含其余的参数。所以,我称之为@choz:我想你刚才说的正是我所做的:PYes,整个要点是,顺便说一下,因为“…
不是运算符”部分,我为此创建了一个CW规范(如果你还没有看到的话):解释得更详细一点,尽管晚了一年。