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

javascript node.js object-literal template-strings template-literals

18020 просмотра

1 ответ

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

foo = {`bar`: 'baz'}

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

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

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

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

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

Автор: trysis Источник Размещён: 23.07.2019 01:52

Ответы (1)


50 плюса

Решение

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

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

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

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

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

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

Нету.

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

Автор: Bergi Размещён: 09.03.2016 08:41
Вопросы из категории :
32x32