前言:深拷貝和淺拷貝最根本的區別在于是否真正獲取一個物件的復制物體,而不是參考,學習深拷貝和淺拷貝之前要先理解什么是基本型別和參考型別,
一、到底什么是基本型別和參考型別?
基本型別:就是值型別,即變數所對應的記憶體區域存盤的是值,
參考型別:就是地址型別,變數所對應的記憶體區域存盤的是地址,真正的資料是在地址對應的記憶體區域中,
二、基本型別和參考型別在賦值時記憶體的變化

var age = 20;
var age = 18;//基本型別重新賦值
var arr = new Array(1,2,3,4);
var arr1 = arr;
arr[0] = 5;
記憶體變化如下

三、深拷貝和淺拷貝
所謂的拷貝可以理解為賦值,
1、基本型別
基本型別在進行賦值時,賦值的是資料,不存在深拷貝和淺拷貝的問題,
2、參考型別
參考型別在進行賦值時,賦的值的地址,
//淺拷貝
var arr1 = new Array(1,2,3);
var arr2 = arr1;

淺拷貝只是把arr1的地址拷貝了一份給arr2,只是增加了一個指標指向已存在的記憶體地址,當修改arr2的值時,arr1的值也被修改,
接下來看一下深拷貝
1、先定義一個json物件
var person = {
"age":30,
"name":"qianxi",
"movie":new Array("少年的你","長津湖")
}
2、把person物件進行拷貝一份
var person2 = {}
for(let key in person){
if(typeof person[key]==="object"){
//movie屬性進行深拷貝
person2[key] = [];
for(let i in person[key]){
person2[key][i] = person[key][i]
}
} else {
person2[key] = person[key];//淺拷貝
}
}
person2.movie[0] = "送你一朵小紅花"
console.log(person);
console.log(person2);
我們來看一下列印結果

看一下記憶體的變化

深拷貝:增加了一個指標并申請了一個新的記憶體,使這個指標指向這個新的記憶體,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/352247.html
標籤:其他
