簡單問題:在JavaScript編寫代碼時,我發現自己在寫相同的代碼行以上:UPSERT對象場典雅
if (!obj.field) obj.field={};
obj.field.inner_field='val';
爲了保護自己的情況下obj.field不定義。有沒有更好的方法來做到這一點?
謝謝!
簡單問題:在JavaScript編寫代碼時,我發現自己在寫相同的代碼行以上:UPSERT對象場典雅
if (!obj.field) obj.field={};
obj.field.inner_field='val';
爲了保護自己的情況下obj.field不定義。有沒有更好的方法來做到這一點?
謝謝!
您可以使用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
'obj.field = Object.assign({},{inner_field:'val'})'覆蓋可能存在的'field'。 OP顯然使用'if',因爲他不想覆蓋整個對象,只需要一個鍵。除了你可以做的性能'obj.field = Object.assign(obj.field || {},{inner_field:'val'});'保留其他鍵。 – vesse
@vesse感謝您的評論我編輯了我的答案:) – GibboK
我的變體是'obj.field = Object.assign({},obj.field,{inner_field:'val'})''。如果'obj.field'是'number'或'string',你的第一個和第三個變體會有一些缺陷。 –
如何使用Object.assign? –
[設置javascript對象屬性的默認值]可能的重複(http://stackoverflow.com/questions/6600868/set-default-value-of-javascript-object-attributes) – Craicerjack
可能的解決方案:'obj.field = Object .assign({},{inner_field:「val」})' –