淺拷貝和深拷貝JS

2021-10-04 01:12:51 字數 1282 閱讀 2355

基本型別資料存放在棧記憶體中,如number,string。複製時直接賦值即可

引用型別資料存放在堆記憶體中,如object,陣列。賦值時是賦予位址值。(只是淺拷貝)

//淺拷貝

function

******clone

(initobj)

;for

(var i in initobj)

return obj;

}或者:

object.

assign

(target,sources)

;複製給target;

//深拷貝

var obj =

json

.parse

(json

.stringify

(initobj));

json

.stringify把物件轉為字串,json

.parse把字串轉為新的物件。

或者function

deepclone

(obj);if

(obj&&

typeof obj===

'object'

)else}}

}return onjclone;

}

object.prototype.tostring方法用來判斷元素的型別;

object.prototype.tostring.

call([

1,2]

);//"[object array]" 可以給出型別。

function

gettype

(obj);if

(obj instanceof

element

)return map[tostring.

call

(obj)];

}

然後deepclone

function

deepclone

(data)

else

if(type ===

'object');

}else

if(type ===

'array')}

else

if(type ===

'object')}

return obj;

}

jsonp方式

function

(obj)

JS深拷貝和淺拷貝

js中物件分為基本型別和復合 引用 型別,基本型別存放在棧記憶體,復合 引用 型別存放在堆記憶體中 堆記憶體中用於存放由new建立的物件,棧記憶體存放一些基本型別的變數和物件的引用變數 對於簡單變數,記憶體小,直接複製不會發生引用 var a 123 var b a a 123456 console...

JS淺拷貝和深拷貝

1.淺拷貝 copy var obj1 物件存放於堆記憶體中,物件中的鍵值對,值可以為物件,可以為陣列.var obj2 obj1 物件,陣列之間只有引用賦值 obj2.name 撒哈哈 當改動物件obj2的時候,obj1的key對應的value也會更改這是淺拷貝 深拷貝 var obj1 var ...

js深拷貝和淺拷貝

走在前端的大道上 var m var n m n.a 15 這時m.a的值是多少 m.a會輸出15,因為這是淺拷貝,n和m指向的是同乙個堆,物件複製只是複製的物件的引用。深拷貝和上面淺拷貝不同,就是徹底copy乙個物件,而不是copy物件的引用,例如,還是之前的例子,我們這麼寫 var m var ...