Javascript 是';捕捉';方法名称:JS/A+;无效,因为它是';什么是JS关键字?

Javascript 是';捕捉';方法名称:JS/A+;无效,因为它是';什么是JS关键字?,javascript,promise,ecmascript-5,Javascript,Promise,Ecmascript 5,我最近开始在一个项目中使用JS承诺。我注意到,每次我使用.catch时,我都会抱怨。它确实运行并且做它应该做的事情,但是我查找了,它看起来确实是对的:因为它不能用作标识符。据我所知,方法名称是标识符,因此这是无效的: Promise.reject("Duh").catch(alert); 应该是这样的: Promise.reject("Duh")['catch'](alert); 我错过了什么 我错过了什么 属性名称不是标识符,它可以使用任何标识符名称。从上的规范: 以及: 您可以在点属性访

我最近开始在一个项目中使用JS承诺。我注意到,每次我使用
.catch
时,我都会抱怨。它确实运行并且做它应该做的事情,但是我查找了,它看起来确实是对的:因为它不能用作标识符。据我所知,方法名称是标识符,因此这是无效的:

Promise.reject("Duh").catch(alert);
应该是这样的:

Promise.reject("Duh")['catch'](alert);
我错过了什么

我错过了什么

属性名称不是标识符,它可以使用任何标识符名称。从上的规范:

以及:

您可以在点属性访问中使用任意标识符名称(但不能使用整数之类的名称),但不能使用[保留]关键字作为标识符,例如在变量或函数名中


然而,这在ES5中确实发生了变化,返回时属性名称必须是标识符。这就是为什么如果你想支持传统浏览器,你仍然需要用括号表示关键词;这就是你的皮棉抱怨的原因。对于对象文本中的属性名称。

不确定为什么会被否决,这是一个正确的答案+1好吧,它纠正了一个语义问题(关于单词“identifier”),但它没有回答为什么会出现警告或关于IE8。(但我没有投反对票)我投了反对票,因为最初的答案很差,简短,没有提供很多信息。删除了否决票,因为后续的编辑效果更好。你是对的。关键的一句是“标识符是不是保留字的标识符名”+1@Evert:对不起,只是它太好用了。我的意图是永远不会给出一个不完整的答案。不遵循ecmaScript规范的浏览器可能会感觉不同于那些遵循ecmaScript规范的浏览器。linter可能会抱怨,因为它试图与ES3兼容。相关:。。。Kangax:
MemberExpression : MemberExpression . IdentifierName
CallExpression : CallExpression . IdentifierName
Identifier :: IdentifierName but not ReservedWord