为什么 JavaScript 不允许使用模板字符串作为对象属性的键?例如,当我输入:
foo = {`bar`: 'baz'}
当进入NodeJS REPL时,它会抛出一个带有“Unexpected template string”和长的堆栈跟踪的SyntaxError
。然而,属性值是正常的,这并不意外。类似的错误也会在浏览器中发生,例如Firebug会抛出一个带有“invalid property id”的SyntaxError
。
模板字符串在“计算属性名”中是允许的。例如,这在支持该语法的所有浏览器中都可以完美编译:
var foo = {
[`bar` + 1]: `baz`
};
并创建对象{"bar1": "baz"}
。
为什么模板字符串不能作为字面量对象的键?这是出于性能原因吗?模板字符串必须编译,可能在运行时(如果我理解不正确,请纠正我),这意味着每次遇到此对象时,解释器都必须计算对象名称。考虑到诸如“处理过的”模板字符串之类的事情,这似乎可能会变慢,尽管自ES5以来我们已经拥有了getter和setter。Firefox没有将其视为错误,这就是我觉得出乎意料的原因。这种语法将来是否允许?