Tha*_*you 9 javascript coffeescript
考虑以下
var a = {foo: "bar"};
Run Code Online (Sandbox Code Playgroud)
相当于
var a = {};
a.foo = "bar";
Run Code Online (Sandbox Code Playgroud)
相当于
var a = {};
a['foo'] = "bar";
Run Code Online (Sandbox Code Playgroud)
相当于
var a = {}
var b = "foo";
a[b] = "bar";
Run Code Online (Sandbox Code Playgroud)
var b = "foo";
var a = { [b]: "bar" };
Run Code Online (Sandbox Code Playgroud)
这样的结果就是
// => {foo: "bar"}
Run Code Online (Sandbox Code Playgroud)
可接受的解决方案是JavaScript或CoffeeScript
使用对象文字表示法无法做到这一点.
更新:根据ECMAScript标准6.0,您现在可以执行以下操作:
var b = 'foo';
var a = { [b]: 'bar' };
console.log( a.foo ); // "bar"
Run Code Online (Sandbox Code Playgroud)
但是,此解决方案不适用于不支持ES6的旧浏览器.
ES6支持计算的属性。
// code from my original question now works in ES6 !
let b = "foo";
let a = { [b]: "bar" };
a.foo; //=> "bar"
Run Code Online (Sandbox Code Playgroud)
可以在内使用任何表达式[]来定义属性名称
let a = {
[(xs => xs.join(''))(['f','o','o'])]: 'bar'
};
a.foo; //=> "bar"
Run Code Online (Sandbox Code Playgroud)
如果您需要在ES5世界中依赖此行为,则可以依靠功能强大的babel.js将ES6代码转换为与ES5兼容的代码。