【发布时间】:2016-01-16 14:28:32
【问题描述】:
为什么 JavaScript 不允许模板字符串作为对象属性键?例如,当我输入:
foo = {`bar`: 'baz'}
在 NodeJS REPL 中,它会抛出一个带有“意外模板字符串”的 SyntaxError,并带有很长的堆栈跟踪。然而,属性值很好,这并不出人意料。浏览器中也会发生类似的错误,例如,Firebug 会抛出带有“invalid property id”的SyntaxError。
“计算属性名称”中允许使用模板字符串。例如,这在所有支持语法的浏览器中编译得非常好:
var foo = {
[`bar` + 1]: `baz`
};
并创建对象{"bar1": "baz"}。
为什么不允许模板字符串作为文字对象键?是出于性能原因吗?必须编译模板字符串,可能在运行时(如果我错了,请纠正我),这意味着每次遇到此对象时,解释器都必须计算对象名称。考虑到诸如“熟”模板字符串之类的因素,这似乎会变得很慢,尽管自 ES5 以来我们已经有了 getter 和 setter。 Firefox 没有将此作为错误提及,这就是我发现它出乎意料的原因。将来某个时候会允许使用该语法吗?
【问题讨论】:
-
不是这个原因,引入了计算属性名。是的,您需要在它周围加上大括号,但它在语法上似乎也更适合作为解决各种场景的通用解决方案。
-
我只是在重新考虑我的答案,并不太确定它是否正确。现在我正在研究 ES6 文档....
-
为什么不允许模板字符串作为文字对象键? 他们是,你只是语法错误......?
标签: javascript node.js object-literal template-strings template-literals