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