Object Literal Значение свойства Сокращение, несовместимое с `this`

В JavaScript можно сделать:

var a = {this: this}

но с сокращением свойств ES6 я получаю SyntaxError:

var b = {this}; // SyntaxError: this is a reserved identifier

Это не реальный случай использования, но мне просто интересно, какая разница между этими двумя. Я думал, что он должен сделать то же самое (создать новый объект или выбросить ошибку).

UPDATE:

Я запускаю этот пример в Firefox 42.0. Однако он работает в babel- node (он создает объект { this: {} } без ошибок). Итак, какое правильное поведение?

Ответ 1

Грамматика для этой статьи инициализатора коротких объектов предусматривает, что один используемый термин должен быть Идентификатором. Поскольку this является зарезервированным словом, оно не является идентификатором, поэтому вы получаете синтаксическую ошибку.

Соответствующая часть спецификации раздел 12.2.6.