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

javascript: add nested attribute in object

本文关键字:添加 嵌套 属性 对象 javascript      更新时间:2023-09-26

使用此示例对象:

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

现在我想在属性data中添加属性link。有时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'
    }
}

您需要首先创建data对象:

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

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

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

如果data可能在那里,也可能不在那里,有一个方便的快捷方式可以使用现有的快捷方式,如果没有,可以创建一个新的快捷方式:

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

它使用了JavaScript功能强大得出奇的||运算符。

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

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)存在,就使用它,如果它不使用正确的操作数({})。这是因为短路评估。

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

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

祝你好运:)