javascript:在对象中添加嵌套属性

时间:2015-11-07 17:37:55

标签: javascript

知道这个示例对象:

obj = {
    id: '123',
    attr: 'something'
}

现在我想在属性link中添加属性data。有时data已经存在,但在此示例中data不存在。

所以如果我这样做

obj.data.link = 'www.website.com';

我收到错误TypeError: Cannot set property 'link' of undefined

结果应该是:

obj = {
    id: '123',
    attr: 'something',
    data: {
        link: 'www.website.com'
    }
}

3 个答案:

答案 0 :(得分:5)

您需要先创建default.list对象:

data

或者您可以一次完成所有操作:

obj.data = {};
obj.data.link = 'www.website.com';

如果obj.data = { link: 'www.website.com' }; 可能已经或可能没有,那么可以使用现有的快捷方式,如果有的话,可以使用现有的快捷方式,如果不是,则创建新的快捷方式:

data

使用JavaScript's curiously-powerful || operator

答案 1 :(得分:1)

您需要初始化数据属性。你可以这样做:

var obj = {
    id: '123',
    attr: 'something'
};

obj.data = {};
obj.data.link = 'www.website.com';

如果属性存在,您可以在分配链接之前进行检查。

if (!obj.data) {
    obj.data = {};
}

正如另一个答案中所述,您可以使用我听说过的'或者操作员'非常强大'=]

obj.data = obj.data || {};

这基本上意味着如果此值(obj.data)存在,则使用它并且如果它不使用右操作数({})。这是因为短路评估。

答案 2 :(得分:0)

Javascript从1.8.5开始,您可以使用以下方法:

Object.defineProperty(obj, "data", {
    value: {'link' : 'www.website.com'},
    writable: true,
    enumerable: true,
    configurable: true
});
祝你好运:)