Строка шаблона как имя объекта объекта
Почему JavaScript не разрешает строку шаблона как ключ свойства объекта? Например, когда я ввожу:
foo = {`bar`: 'baz'}
в NodeJS REPL, он выдает SyntaxError
с "Неожиданной строкой шаблона" с длинной трассировкой стека. Значения свойств прекрасны, однако это не так неожиданно. Подобные ошибки происходят в браузере, например, Firebug бросает SyntaxError
с "недопустимым идентификатором свойства".
Шаблонные строки разрешены в "именах вычисленных свойств". Например, это компилируется отлично во всех браузерах, поддерживающих синтаксис:
var foo = {
[`bar` + 1]: `baz`
};
и создает объект {"bar1": "baz"}
.
Почему строки шаблонов не допускаются как ключи буквального объекта? Является ли это по соображениям производительности? Строки шаблона должны быть скомпилированы, возможно, во время выполнения (исправьте меня, если я ошибаюсь), что означает, что каждый раз, когда он сталкивается с этим объектом, интерпретатор должен будет вычислить имя объекта. Факторинг в таких вещах, как "приготовленные" строки шаблонов, кажется, что он может замедляться, хотя с ES5 мы имеем геттеры и сеттеры. Firefox не упоминает об этом как об ошибке, поэтому я нашел ее неожиданным. Будет ли разрешен синтаксис в будущем?
Ответы
Ответ 1
Почему строки шаблонов не допускаются как литеральные ключи объекта?
Шаблонные строки - это выражения, а не литералы 1. Вы можете использовать только строковые литералы (и идентификаторы) для имен свойств, для всего остального - это неизвестно как статическое - вам нужно имя вычисленного свойства.
Это из соображений производительности?
Нет, это маловероятно. Это облегчает синтаксический анализ и позволяет легко отличать постоянные (статически известные) имена свойств от динамически вычисляемых.
И в основном это особенность, которой никто не нуждается. Это не упрощает или сокращает что-либо, и то, что вы достигнете с ним, уже возможно.
Будет ли разрешен синтаксис в будущем?
Неа.
1: Даже когда их называют "шаблонами литералов", технически они не literals. И: шаблонам даже не нужны строки, они могут оценить что угодно.