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