JS實現深拷貝 深轉殖 和淺拷貝 淺轉殖

2021-10-09 15:58:36 字數 1280 閱讀 7791

淺拷貝:只複製物件的基本型別,對於引用型別,只是轉殖位址(包含的內嵌的物件或陣列,不再複製副本)

引用型別,只是轉殖位址,那麼原物件修改,轉殖後的新物件也會跟著變化,轉殖不徹底

陣列的array.from()方法就是實現的淺拷貝

物件的object.assign()方法也是實現的淺拷貝

深拷貝:複製物件的基本型別和引用型別(包含的內嵌的物件或陣列,依然複製副本)

function lowclone(val) 

for (var key in val)

return newobj

}var obj =

}var result = lowclone(obj)

// 用json.stringify方便看列印結果

console.log(json.stringify(result)) //}

obj.c.c1 = 7;

obj.b[2] = [5, 6]

console.log(json.stringify(obj)) //}

console.log(json.stringify(result)) //}

// 可以看出淺轉殖的原物件改變,轉殖後的物件屬性也跟著改變,淺轉殖只是轉殖位址。

實現深拷貝需要用到遞迴的思想

具體**如下:

// 實現深拷貝

function deepclone(val)

//判斷是array

if (val instanceof array)

//判斷是物件

var newobj = {}

for (var key in val)

} return newobj

}var obj =

}var result = deepclone(obj);

// 用json.stringify方便看列印結果

console.log(json.stringify(obj)) //}

console.log(json.stringify(result)) //}

obj.c.c1 = 7;

obj.b[2] = [5, 6]

console.log(json.stringify(obj)) //}

console.log(json.stringify(result)) //}

看列印結果,可以看出實現了深拷貝。

C 淺轉殖與深轉殖(淺拷貝與深拷貝)

介紹 1 淺轉殖 在淺轉殖中,如果原型物件的成員變數是值型別,將複製乙份給轉殖物件 如果原型物件的成員變數是引用型別,則將引用物件的位址複製乙份給轉殖物件,也就是說原型物件和轉殖物件的成員變數指向相同的記憶體位址。簡單來說,在淺轉殖中,當物件被複製時只複製它本身和其中包含的值型別的成員變數,而引用型...

js實現深拷貝和淺拷貝

let obj let newobj obj.age.age 25 修改第二層的obj.age.age,newobj.age.age也會跟著變化 console.log newobj 複製 注意 資料的slice和concat方法也是淺拷貝,只能拷貝一層 原理 把乙個物件轉化成乙個字串,再把這個字串...

js實現深拷貝和淺拷貝

淺拷貝 思路 把父物件的屬性,全部拷貝給子物件,實現繼承。問題 如果父物件的屬性等於陣列或另乙個物件,那麼實際上,子物件獲得的只是乙個記憶體位址,不會開闢新棧,不是真正拷貝,因此存在父物件被篡改的可能。function deepcopy o for i in o return f 深拷貝 思路 遞迴...