为什么JavaScript不允许模板字符串作为对象属性键?例如,当我输入:
foo = {`bar`: 'baz'}
进入NodeJS REPL,它会抛出一个 SyntaxError
带有长堆栈跟踪的“意外模板字符串”。属性值很好,但是,这并不出乎意料。浏览器中也会发生类似的错误,例如Firebug抛出一个SyntaxError
带有“无效属性ID”的错误。
“计算的属性名称”中允许使用模板字符串。例如,这在所有支持以下语法的浏览器中都可以完美编译:
var foo = {
[`bar` + 1]: `baz`
};
并创建对象 {"bar1": "baz"}
。
为什么不允许模板字符串作为文字对象键?是出于性能原因吗?模板字符串必须在运行时进行编译(如果我错了,请纠正我),这意味着每次遇到此对象时,解释器都必须计算对象名称。考虑到“煮熟的”模板字符串之类的因素,这看起来可能会变慢,尽管自ES5以来我们已经有了吸气剂和吸气剂。Firefox并没有将其提及为错误,这就是为什么我发现它出乎意料。将来是否会允许使用该语法?