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