程式碼中得到一個陣列arr=[1,2,3];因為馬上會被銷毀,所以不能直接賦值給物件Obj.a,請問這種情況jquery如何寫,使得arr銷毀之後Obj.a=[1,2,3]?
一般情況下很少會在 JS 中遇到「銷毀」。然後,我不明白你所謂的立即銷毀是指什麼?
如果是指 delete arr,那麼直接賦值也不會有問題,如下圖:
delete arr
如果你是要改變 arr 的內容。那麼可以複製一個陣列(有幾種方法,concat 只是其中一種)
arr
concat
Obj.a = [].concat(arr);
如果確實需要深拷貝,jQuery.fn.clone(),不過貌似有一些限制。
如果其它數據,自己寫深拷貝還是有點難度也比較麻煩,不如用 Lodash 的 cloneDeep()
拷貝數組:
obj.a = arr.slice();
obj.a = JSON.parse( JSON.stringify(arr) );
沒看懂你銷毀的意思。 。 。 。 至於深拷貝:
function cloneObj(obj){ if( !obj || typeof obj == "string" ){ return obj; } else if ( obj instanceof Array ){ return [].concat(obj); } else { var tempObj = {}; for( var key in obj ){ tempObj[key] = cloneObj(obj[key]); } return tempObj; } }
如果你使用 ES2015 的話,可以使用物件展開運算子來拷貝。
obj.a = [...arr]
一般情況下很少會在 JS 中遇到「銷毀」。然後,我不明白你所謂的立即銷毀是指什麼?
如果是指
delete arr
,那麼直接賦值也不會有問題,如下圖:如果你是要改變
arr
的內容。那麼可以複製一個陣列(有幾種方法,concat
只是其中一種)如果確實需要深拷貝,jQuery.fn.clone(),不過貌似有一些限制。
如果其它數據,自己寫深拷貝還是有點難度也比較麻煩,不如用 Lodash 的 cloneDeep()
拷貝數組:
利用 slice
利用 JSON
沒看懂你銷毀的意思。 。 。 。
至於深拷貝:
如果你使用 ES2015 的話,可以使用物件展開運算子來拷貝。