用json方法來作深拷貝應該知道的一點東西!

2022-01-31 15:02:25 字數 1051 閱讀 2565

之前寫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...