知道这个示例对象:
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'
}
}
答案 0 :(得分:5)
您需要先创建default.list
对象:
data
或者您可以一次完成所有操作:
obj.data = {};
obj.data.link = 'www.website.com';
如果obj.data = {
link: 'www.website.com'
};
可能已经或可能没有,那么可以使用现有的快捷方式,如果有的话,可以使用现有的快捷方式,如果不是,则创建新的快捷方式:
data
答案 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
});
祝你好运:)