最近开始在一个项目中使用JS Promises。我注意到每次我使用 .catch
我的 JS linter提示。它确实运行并做了它应该做的事情,但我查找了 ECMAScript spec它看起来真的是对的:因为catch
is a keyword它不能用作标识符。据我了解,方法名称是标识符,因此这是无效的:
Promise.reject("Duh").catch(alert);
应该是这样的:
Promise.reject("Duh")['catch'](alert);
我错过了什么?
最佳答案
What am I missing?
属性名称不是标识符,它可以使用任何标识符名称。来自 Property Accessors 上的规范:
MemberExpression : MemberExpression . IdentifierName
CallExpression : CallExpression . IdentifierName
和identifiers :
Identifier :: IdentifierName but not ReservedWord
您可以在点属性访问中使用任意标识符名称(但不能使用整数之类的东西),但不能使用 [reserved] 关键字作为标识符,例如在变量或函数名称中。
然而,这在 ES5 中确实发生了变化,回到 EcmaScript 3属性名称必须是标识符。这就是为什么如果你想支持旧版浏览器,你仍然需要对关键字使用括号表示法;这就是你的 linter 提示它的原因。 Same holds用于对象文字中的属性名称。
关于javascript - JS Promises/A+ 的 'catch' 方法名称是否无效,因为它是 JS 关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25774628/