相关疑难解决方法(0)

模板字符串作为对象属性名称

为什么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

59
推荐指数
3
解决办法
2万
查看次数