协慌网

登录 贡献 社区

是否可以将动态命名的属性添加到 JavaScript 对象?

在 JavaScript 中,我创建了一个像这样的对象:

var data = {
    'PropertyA': 1,
    'PropertyB': 2,
    'PropertyC': 3
};

如果直到运行时才确定属性名称,是否有可能在该对象最初创建之后为其添加其他属性? IE

var propName = 'Property' + someUserInput
//imagine someUserInput was 'Z', how can I now add a 'PropertyZ' property to 
//my object?

答案

是的。

var data = {
    'PropertyA': 1,
    'PropertyB': 2,
    'PropertyC': 3
};

data["PropertyD"] = 4;

// dialog box with 4 in it
alert(data.PropertyD);
alert(data["PropertyD"]);

ES6 赢了!

const b = 'b';
const c = 'c';

const data = {
    a: true,
    [b]: true, // dynamic property
    [`interpolated-${c}`]: true, // dynamic property + interpolation
    [`${b}-${c}`]: true
}

如果您记录data则会得到以下信息:

{
  a: true,
  b: true,
  interpolated-c: true,
  b-c: true
}

这利用了新的 “ 计算属性”语法和 “ 模板文字”

是的,有可能。假设:

var data = {
    'PropertyA': 1,
    'PropertyB': 2,
    'PropertyC': 3
};
var propertyName = "someProperty";
var propertyValue = "someValue";

任何一个:

data[propertyName] = propertyValue;

或者

eval("data." + propertyName + " = '" + propertyValue + "'");

第一种方法是首选。如果您使用的是用户提供的值,则 eval()具有明显的安全问题,因此,如果可以避免使用它,则不要使用它,但是值得知道它的存在以及它可以做什么。

您可以参考以下内容:

alert(data.someProperty);

或者

data(data["someProperty"]);

或者

alert(data[propertyName]);