關於深拷貝

今天的code rewiew , 看到了如下的代碼來實現深拷貝的效果。

var a = {name:'demo'};
var c = JSON.parse(JSON.stringify(a))

其實這樣的實現,看似是解決了問題:防止數據的意外篡改。但是,其實有很多的隱患。

性能

首先是前端性能問題,這樣做,對瀏覽器的性能消耗其實是很大的。尤其是在頁面頻繁render的時候,方法被重複調用,嚴重的話可能會導致瀏覽器的卡頓。

缺陷

通過序列化和反序列化的方式,來實現數據的深拷貝,對於普通的對象或者數組來說,本身沒有什麼問題,但是對於一些特殊的類型,其實是有缺陷的,比如NaN,比如Inifinity:

var a = {name:NaN,code:Infinity};
var c = JSON.parse(JSON.stringify(a))//{name: null, code: null}

而且如果出現循環引用的問題,同樣是不可靠的。

總結

僅僅綜合這幾點的話,我們在日常的開發中,就應該規避這種情況。解決的方法就是拋棄需要 deep clone 的代碼。
而且對於數據的修改,你本身應該就是能夠預期的,在這種情況下,我們也可以針對某些數據,替換覆蓋,而不是粗暴的去深拷貝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章