我正在编写自己的 ES6 解析器。但我不明白 ObjectLiteral 中的 CoverInitializedName 是什么。
在ECMA-2015 ObjectLiteral 规范中关于此的部分中,我看到
PropertyDefinition[Yield] :
IdentifierReference[?Yield]
CoverInitializedName[?Yield] <-- this is what I dont understand
PropertyName[?Yield] : AssignmentExpression[In, ?Yield]
MethodDefinition[?Yield]
Run Code Online (Sandbox Code Playgroud)
然后我查找 CoverInitializedName 的定义。
CoverInitializedName[Yield] :
IdentifierReference[?Yield] Initializer[In, ?Yield]
IdentifierReference[Yield] :
Identifier
[~Yield] yield
Initializer[In, Yield] :
= AssignmentExpression[?In, ?Yield]
Run Code Online (Sandbox Code Playgroud)
初始值设定项以 = 符号开头。
这意味着我可以使用这样的赋值运算符来分配属性。
let o = { prop = value };
Run Code Online (Sandbox Code Playgroud)
如果我执行此代码,它将抛出 SyntaxError: Invalid shorthand property initializer
我感到困惑并查看了MDN 对象初始值设定项文档。 哪有这回事。那么这个 CoverInitializedName 是什么?
[编辑]
loganfsmyth的回答是
({ prop = value } = …Run Code Online (Sandbox Code Playgroud)