2015-11-07 37 views
0

威特此例子中的物體添加嵌套屬性。有時data已經存在,但在本例中不存在data的javascript:</p> <pre><code>obj = { id: '123', attr: 'something' } </code></pre> <p>現在我想添加的屬性<code>link</code>在屬性<code>data</code>:在對象

所以,如果我做

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

我得到的錯誤TypeError: Cannot set property 'link' of undefined

的結果應該是:

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

或只是'obj.data = {鏈接: 'www.website.com'}'。 ... – davidkonrad

回答

5

您需要首先創建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's curiously-powerful || operator

+0

'好奇的強大' - 好的短語 - 雖然,該頁忽略了幾乎同樣有趣的'&&',你可以用'&&'和'||'組合做什麼 –

+0

@JaromandaX :我認爲它確實提到了它,但我只是檢查了一下,你是對的!可能需要修改一下。 :-) –

1

需要初始化數據屬性。你可以這樣做:

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

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

在屬性存在的情況下,你可以在分配鏈接之前檢查。

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

而作爲另一種回答說你可以使用我聽說是「好奇強大的」 or運算符=]

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

這基本上意味着,如果(obj.data)存在此值使用它,如果它不使用正確的操作數({})。這是因爲短路評估。

+0

但有時數據已經存在 – user3142695

+0

錯過了這個問題。更新了答案。抱歉!感謝您的支持。 =] – AtheistP3ace

+1

去'好奇的強大'' –

0

的JavaScript 1.8.5你可以用下面的方法:

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

祝你好運:)

相關問題