如果再考慮更奇葩更複雜的情況,例如我們定義:
var obj = [, "b": 2 }, ["c", ]];
這是乙個由物件、陣列雜合成的奇葩陣列,雖然我們平時寫程式基本不可能這麼折騰自己,但是可以作為一種特殊情況來考慮,這樣我們就可以結合之前說的方法去拓展拷貝函式:
var objdeepcopy = function (source) ;
for (var item in source)
return sourcecopy;
}var objcopy = objdeepcopy(obj);
objcopy[0].a.a1[1] = "a13";
objcopy[1][1].e = "6";
obj // => [, "b": 2 }, ["c", ]]
objcopy // => [, "b": 2 }, ["c", ]]
這樣它就可以作為乙個通用函式替我們進行深拷貝操作了。
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...
js的深轉殖與淺轉殖
json.stringify obj 的弊端 var o var cloneobj o cloneobj.a 2 console.log o.a 2 淺轉殖其實就是將o的位址複製乙份給cloneobj,也就是轉殖後的物件與原物件指向同乙個位址,所以轉殖後的物件與原物件操作的是同一塊堆記憶體的內容 v...
JS淺轉殖和深轉殖
為什麼會有轉殖這麼個玩意呢?上 var a 1,2,3 var b a a 1 4 console.log b 1 4 這就是我們為什麼提到轉殖的原因。我只不過改了a陣列的內容,怎麼b陣列的內容也跟著一起變了嘞?這裡需要知道a和b在棧和堆中的儲存情況 大概說下,陣列的內容是儲存在堆中的,而a和b不過...