Foz*_*ozi 8 javascript promise ecmascript-5
我最近开始在一个项目中使用JS Promises.我注意到每次我使用.catch我的JS linter抱怨.它确实运行并做了它应该做的事情,但我查找了ECMAScript规范,它看起来确实是正确的:因为它catch是一个关键字,它不能用作标识符.据我所知,方法名称是标识符,所以这是无效的:
Promise.reject("Duh").catch(alert);
Run Code Online (Sandbox Code Playgroud)
它应该是这样的:
Promise.reject("Duh")['catch'](alert);
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
Ber*_*rgi 16
我错过了什么?
属性名称不是标识符,它可以使用任何标识符名称.从属性访问者的规范:
MemberExpression : MemberExpression . IdentifierName
CallExpression : CallExpression . IdentifierName
Run Code Online (Sandbox Code Playgroud)
和标识符:
Identifier :: IdentifierName but not ReservedWord
Run Code Online (Sandbox Code Playgroud)
您可以在点属性访问中使用任何任意标识名称(但不能使用整数),但不能将[保留]关键字用作标识符,例如在变量或函数名称中.
但是,这确实随着ES5而改变,回到EcmaScript 3中,属性名称必须是标识符.这就是为什么你仍然需要为关键字使用括号表示法,如果你想支持旧版浏览器; 这就是为什么你的linter抱怨它的原因.同样适用于对象文本属性名称.
| 归档时间: |
|
| 查看次数: |
662 次 |
| 最近记录: |