What am I missing?
A property name is not an identifier, it can use any identifier name. From the spec on Property Accessors:
MemberExpression : MemberExpression . IdentifierName
CallExpression : CallExpression . IdentifierName
and identifiers:
Identifier :: IdentifierName but not ReservedWord
You can use any arbitrary identifer name (but not things like integers) in a dot property access, but you can't use those that are [reserved] keywords as identifier, e.g. in a variable or function name.
However, this did change with ES5, back in EcmaScript 3 property names were required to be identiers. That's why you still need to use the bracket notation for keywords if you want to support legacy browsers; and it's the reason why your linter complains about it. Same holds for property names in object literals.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…