Подтвердить что ты не робот

Строка шаблона как имя объекта объекта

Почему JavaScript не разрешает строку шаблона как ключ свойства объекта? Например, когда я ввожу:

foo = {`bar`: 'baz'}

в NodeJS REPL, он выдает SyntaxError с "Неожиданной строкой шаблона" с длинной трассировкой стека. Значения свойств прекрасны, однако это не так неожиданно. Подобные ошибки происходят в браузере, например, Firebug бросает SyntaxError с "недопустимым идентификатором свойства".

Шаблонные строки разрешены в "именах вычисленных свойств". Например, это компилируется отлично во всех браузерах, поддерживающих синтаксис:

var foo = {
    [`bar` + 1]: `baz`
};

и создает объект {"bar1": "baz"}.

Почему строки шаблонов не допускаются как ключи буквального объекта? Является ли это по соображениям производительности? Строки шаблона должны быть скомпилированы, возможно, во время выполнения (исправьте меня, если я ошибаюсь), что означает, что каждый раз, когда он сталкивается с этим объектом, интерпретатор должен будет вычислить имя объекта. Факторинг в таких вещах, как "приготовленные" строки шаблонов, кажется, что он может замедляться, хотя с ES5 мы имеем геттеры и сеттеры. Firefox не упоминает об этом как об ошибке, поэтому я нашел ее неожиданным. Будет ли разрешен синтаксис в будущем?

4b9b3361

Ответ 1

Почему строки шаблонов не допускаются как литеральные ключи объекта?

Шаблонные строки - это выражения, а не литералы 1. Вы можете использовать только строковые литералы (и идентификаторы) для имен свойств, для всего остального - это неизвестно как статическое - вам нужно имя вычисленного свойства.

Это из соображений производительности?

Нет, это маловероятно. Это облегчает синтаксический анализ и позволяет легко отличать постоянные (статически известные) имена свойств от динамически вычисляемых.

И в основном это особенность, которой никто не нуждается. Это не упрощает или сокращает что-либо, и то, что вы достигнете с ним, уже возможно.

Будет ли разрешен синтаксис в будущем?

Неа.

1: Даже когда их называют "шаблонами литералов", технически они не literals. И: шаблонам даже не нужны строки, они могут оценить что угодно.