Это изменение в ECMA-262 между выпусками 3 и 5 (которое вы можете получить здесь ).
В обоих выпусках раздел 7.6 определяет идентификатор as
Identifier ::
IdentifierName but not ReservedWord
Однако в разделе 11.2.1 средства доступа к свойствам, использующие точечную запись, были изменены с
MemberExpression . Identifier
CallExpression . Identifier
в издании 3 на
MemberExpression . IdentifierName
CallExpression . IdentifierName
виздание 5, т. е. использование зарезервированных имен в качестве точек доступа действительно допустимо сейчас .
Я не знаю, было ли сделано это изменение только потому, что ограничение на Идентификатор Синтаксически не нужно, потому что ни одно из зарезервированных слов не может юридически следовать .
или если оно также кодифицирует существующую практику различных реализаций.
PS: После некоторого поиска я обнаружил следующеев письме от Allen Wirfs-Brock , редакторе проекта для редакции 5:
Грамматика ES3 не позволяет использовать зарезервированные слова (такие как true и false) в качествеPropertyName или справа от периода в MemberExpression.Ваши тесты подтверждают, что большинство реализаций соответствуют этому ограничению, в то время как FF имеет «нестандартное» расширение, которое позволяет намеренно использовать зарезервированные слова (или, по крайней мере, те, которые вы тестировали) в этих контекстах.
ES3.1 преднамереннопринял расширение FF в качестве стандартной части языка, поэтому, когда другая реализация в конечном итоге обновляется для поддержки ES3.1, они не должны долго сообщать об ошибках для ваших тестовых случаев.
Обратите внимание, что ECMAScript 3.1 былоригинальное название для того, что теперь известно как ECMAScript 5.