js的深轉殖與淺轉殖

2021-10-23 14:14:44 字數 1261 閱讀 3770

json.stringify(obj)的弊端

var o=

var cloneobj=o;

cloneobj.a=2;

console.

log(o.a)

;//2

淺轉殖其實就是將o的位址複製乙份給cloneobj,也就是轉殖後的物件與原物件指向同乙個位址,所以轉殖後的物件與原物件操作的是同一塊堆記憶體的內容

var o=

var cloneobj=

json

.parse

(json

.stringify

(o))

;cloneobj.a=2;

console.

log(o.a)

;//1

深轉殖就是在堆中新開闢一塊記憶體指向cloneobj,然後將o內的內容複製乙份到cloneobj指向的記憶體中,轉殖後的物件與原物件為兩個不同沒有聯絡的物件

一般在專案中都會使用json.parse(json.stringify(obj))來實現深轉殖,深轉殖也是為了防止我們直接操作原物件造成不可恢復性操作

function

shallowclone

(obj

)var target=obj.constructor===array?

:;for(

var key in obj)

}return target;

}

function

deepclone

(obj

)var target=obj.constructor===array?

:;for(

var key in obj)

target[key]

=deepclone

(obj[key])}

else}}

return target;

}

如果物件的屬性是函式、日期、正規表示式和symbol型別的資料會在轉換的時候出現問題(不能轉換屬性不可遍歷的物件)

函式、symbol、undefined 轉換後都是undefined

正規表示式轉換後為{}

日期轉換後的格式會不正確,如下

js 轉殖 淺轉殖 深轉殖)

淺轉殖var obj var obj1 function clone origin,target return target clone obj,obj1 obj1.name ge console.log obj1.name ge console.log obj.name chen obj1.car...

淺轉殖與深轉殖

clone 方法是object中的乙個方法 淺轉殖 shallow copy employee cindy tobby.clone 深轉殖 deep copy 必須實現cloneable介面 class employee implements cloneable 如果物件中有引用型別,就必須使用深度...

深轉殖與淺轉殖

淺轉殖 被轉殖物件的所有變數都含有與原來物件相同的值,而所有的對其他物件的引用仍然指向原來的物件。換言之,淺轉殖僅僅轉殖所考慮的物件,而不轉殖它所引用的物件。深轉殖 被轉殖物件的所有變數都含有與原來物件相同的值,除去那些引用其他物件的變數。那些引用其他物件的變數將指向被轉殖的新物件,而不再是原有的那...