之前寫js比較多的的時候也寫過深拷貝,淺拷貝,繼承啥的,還有自定義的監聽事件。然而過了很久都忘了。
最近在專案上用的深拷貝都是b = json.parse( json.stringify(a) ) ,沒有深究過原理,也沒考量過百分百的正確性。只是用了很多次沒啥錯誤現象。
然而在群裡有人問到怎麼深拷貝,我就甩出了這個簡單的方法。有大神出來說這個是不大正確的。瞬間懵逼,經過大神指點以及自己普及。總算發現坑了,一陣虛汗!
坑點在於,如果要深拷貝的物件屬性值為undefined或者是function的時候,會被過濾掉!
1.json不支援nan,infinity,甚至精確的浮點數,更別說迴圈引用和function了。
2.序列化就是序列化, 反序列化就是反序列化, 不要濫用.
3.b = json.parse( json.stringify(a) )
侷限性:無法複製函式;原型鏈沒了,物件就是object,所屬的類沒了。但是他簡單,大多時候完全可以滿足需求了!
順便貼上好用的深拷貝函式
var a=
}function deepcopy(p,c);
for(i in p);
deepcopy(p[i],c[i]);
}else}}
return c;
}var b=deepcopy(b,a)
console.log(b)
列印結果:
js簡易深拷貝json
vartuta vartuta1 for x intuta tuta1 0 friends 0 name sadkfj document.write json.stringify tuta document.write json.stringify tuta1 如果只是簡易的使用tuta1.push...
關於json物件的深拷貝
前兩天寫程式,有乙個是對後台返回的json資料進行整理然後再使用,用到了關於json 的拷貝。我在我的一篇部落格中提到過對陣列的拷貝。分為深度拷貝,和淺拷貝。這裡附上鏈結 其實對於陣列的拷貝是比較簡單的,大不了就自己迴圈一下,然後放到乙個新陣列中,或者是在我部落格中提到的使用 slice 0 的辦法...
js 深拷貝方法
object 方法 object.assign target,source 將源拷貝到目標,切返回目標 es6 擴充套件運算子 陣列方法 slice concat,es6擴充套件運算子 複製 json序列化 let obj let str json.strify obj json.parse str...