JS——深拷貝
阿新 • • 發佈:2020-12-28
技術標籤:JS
var My={
name:'123',
age:22,
hobby:['吃飯','睡覺','打遊戲'],
study:{
js:{
vue:'雙向資料繫結',
react:'元件化開發'
},
html:{
h5:{div:'語義化標籤',input:'增強型表單'}
}
}
}
let My2=My //淺拷貝,複製的是地址
// My2.age=10
// console.log(My);
// console.log(My2);
function deepClone(obj){
//傳入初始引數
//如果不是物件或陣列就返回,是null空物件也返回
if((typeof obj)!='object'||obj==null){
return obj
}
//初始化返回結果
let result;
//判斷是不是陣列
if(obj instanceof Array){
result=[]
}else if(obj instanceof Object){
result={}
}
for (let key in obj){ //for in 遍歷物件,遍歷的是key
//判斷key不是原型上的屬性 hasOwnProperty方法 如果屬性在原型上會返回false
if(obj.hasOwnProperty(key)){
//遞迴函式 使用迴圈把每個引數傳入然後重複呼叫 迴圈完畢函式執行完畢
result[key]=deepClone(obj[key])
}
}
//返回結果
return result;
}
// console.log(deepClone(My));
//深拷貝 在記憶體中開闢了新的空間,複製的物件地址指向新的地址
My2=deepClone(My)
My2.age=12
console.log(My);
console.log(My2);