Чому JavaScript не дозволяє рядок шаблону як ключ властивості об’єкта? Наприклад, коли я вводжу:
foo = {`bar`: 'baz'}
у NodeJS REPL він викидає SyntaxError
з "Несподіваним рядком шаблону" з довгим трасуванням стека. Однак вартості властивостей чудові, що не так вже й несподівано. Подібні помилки трапляються у браузері, наприклад, Firebug видає a SyntaxError
з "недійсним ідентифікатором властивості".
Рядки шаблонів дозволені в "обчислюваних назвах властивостей". Наприклад, це чудово компілюється у всіх браузерах, які підтримують синтаксис:
var foo = {
[`bar` + 1]: `baz`
};
і створює об’єкт {"bar1": "baz"}
.
Чому рядки шаблонів заборонені як літеральні об’єктні ключі? Це з міркувань продуктивності? Рядки шаблонів повинні бути скомпільовані, можливо, під час виконання (виправте мене, якщо я помиляюся), що означає, що кожного разу, коли він зустрічає цей об'єкт, інтерпретатору доведеться обчислювати ім'я об'єкта. Враховуючи такі речі, як "приготовані" рядки шаблонів, здається, це може стати повільним, хоча у нас є геттери та сетери з ES5. Firefox не згадує про це як про помилку, саме тому я визнав це несподіваним. Чи буде дозволено синтаксис колись у майбутньому?