標籤:parse 不用 alt 使用 各路 src 對象 str 結果
在使用vue的時候遇到一個需求需要備份一個多維陣列對象,用了好幾種方法得到的結果都是相互連帶影響的,無法做到在修改原數組的基礎上,copy出一份為改動過的原資料,看了下網上各路大仙的套路,還是不能深信,還是自己動手看看最好了。
首先是例子1,假如是一個單純簡單的數組對象:
// ------------情況1------------ var arr = [0,1,2,3]; var arr1 = arr; var arr2 = arr.slice(0); var arr3 = JSON.parse(JSON.stringify(arr)); arr.push(4); console.log(arr1); console.log(arr2); console.log(arr3);
結果是這樣:
可以看到後兩者很好的滿足了我們的需求,沒有收到影響。
然後是例子2,這是一個相對複雜的多維對象。
1 // ------------情況2------------ 2 var obj = [ 3 { a:‘0‘}, 4 { b:‘1‘}, 5 { c:‘2‘}, 6 { 7 d:[ 8 { e:‘3‘}, 9 { f:‘4‘},10 { g:‘5‘},11 ]12 },13 ];14 var copy1 = obj;15 var copy2 = obj.slice(0);16 var copy3 = JSON.parse(JSON.stringify(obj));17 18 obj[3].d[2][‘h‘] = ‘6‘;19 console.log(copy1);20 console.log(copy2);21 console.log(copy3);
結果
結果就有不同了,發現前兩種方式都發生了改變,這是因為slice(),contact() 這類類似的方法只能對簡單的數組對象進行拷貝,如果其中包含對象,就無法隨人願了,還是第三種堅挺;
因為,就js來說不管是array對象,json對象,其本身是參考型別,是指向其地址的,運用JSON解析成非參考型別的字串變數,再反解析回來,所以結果令人滿意,當然如果是像
php這種擁有&引用符號的,那就不用擔心這個問題了。
關於js拷貝對象的問題