2016-08-10 24 views
3

簡單問題:在JavaScript編寫代碼時,我發現自己在寫相同的代碼行以上:UPSERT對象場典雅

if (!obj.field) obj.field={}; 
obj.field.inner_field='val'; 

爲了保護自己的情況下obj.field不定義。有沒有更好的方法來做到這一點?

謝謝!

+0

如何使用Object.assign? –

+0

[設置javascript對象屬性的默認值]可能的重複(http://stackoverflow.com/questions/6600868/set-default-value-of-javascript-object-attributes) – Craicerjack

+0

可能的解決方案:'obj.field = Object .assign({},{inner_field:「val」})' –

回答

0

您可以使用in運算符。

var obj = {}; 
 
    
 
if (!('field' in obj)) { 
 
    obj.field = {}; 
 
} 
 
obj.field.inner_field = 'val'; 
 
console.log(obj);

或者你可以使用Object.assign()(注:這將覆蓋可能存在的領域)。

var obj = {}; 
 
obj.field = Object.assign({}, {inner_field: 'val'}) 
 
console.log(obj);

或者您可以使用:

var obj = {}; 
 
obj.field = obj.field || {}; 
 
obj.field.inner_field = 'val'; 
 
console.log(obj);

文檔: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in

+1

'obj.field = Object.assign({},{inner_field:'val'})'覆蓋可能存在的'field'。 OP顯然使用'if',因爲他不想覆蓋整個對象,只需要一個鍵。除了你可以做的性能'obj.field = Object.assign(obj.field || {},{inner_field:'val'});'保留其他鍵。 – vesse

+0

@vesse感謝您的評論我編輯了我的答案:) – GibboK

+0

我的變體是'obj.field = Object.assign({},obj.field,{inner_field:'val'})''。如果'obj.field'是'number'或'string',你的第一個和第三個變體會有一些缺陷。 –