为什么JavaScript不允许模板字符串作为对象属性键?例如,当我输入:
foo = {`bar`: 'baz'}
Run Code Online (Sandbox Code Playgroud)
在NodeJS REPL中,它会抛出一个SyntaxError带有长堆栈跟踪的"Unexpected模板字符串".但是,属性值很好,这并不是意料之外的.在浏览器中发生类似的错误,例如,Firebug会抛出SyntaxError"无效的属性ID".
"计算属性名称"中允许使用模板字符串.例如,这在所有支持语法的浏览器中编译得非常好:
var foo = {
[`bar` + 1]: `baz`
};
Run Code Online (Sandbox Code Playgroud)
并创建对象{"bar1": "baz"}.
为什么不允许模板字符串作为文字对象键?是出于性能原因吗?必须在运行时编译模板字符串(如果我错了,请纠正我),这意味着每次遇到此对象时,解释器都必须计算对象名称.考虑到"煮熟的"模板字符串之类的东西,这似乎可能会变慢,尽管我们从ES5开始就有吸气剂和固定器.Firefox没有提到这是一个错误,这就是我发现它意外的原因.将来某个时候会允许语法吗?
javascript object-literal node.js template-strings template-literals