1. 程式人生 > 其它 >JS——深拷貝

JS——深拷貝

技術標籤: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);