是否可以使用JavaScript中的对象字面量定义一个动态命名的属性? [英] Is it possible to define a dynamically named property using object literal in JavaScript?

查看:186
本文介绍了是否可以使用JavaScript中的对象字面量定义一个动态命名的属性?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请考虑以下

var a = {foo: "bar"};

等同于

var a = {};
a.foo = "bar";

等同于

var a = {};
a['foo'] = "bar";

等同于

var a = {}
var b = "foo";
a[b] = "bar";



是否可以执行



Is it possible to do something like

var b = "foo";
var a = { [b]: "bar" };

这样结果将是

// => {foo: "bar"}






可接受的解决方案in JavaScript或CoffeeScript


Acceptable solutions are in JavaScript or CoffeeScript

推荐答案

ES6支持计算属性。

ES6 supports computed properties.

// code from my original question now works in ES6 !
let b = "foo";
let a = { [b]: "bar" };

a.foo; //=> "bar"

任何表达式都可以在 [] 定义属性名称

Any expression can be used within the [] to define the property name

let a = {
  [(xs => xs.join(''))(['f','o','o'])]: 'bar'
};

a.foo; //=> "bar"

如果您需要在ES5世界中依赖这种行为,非常有能力 babel.js 将您的ES6代码转换为兼容ES5的代码。

If you need to rely on this behavior in an ES5 world, you can lean on the very capable babel.js to transpile your ES6 code to ES5-compatible code.

这篇关于是否可以使用JavaScript中的对象字面量定义一个动态命名的属性?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆