javascript深/浅拷贝

发布日期:2017-04-11 阅读量:488

1. 深浅拷贝主要指的是引用类型数据 Object

2. 浅拷贝

   只复制引用类型数据的引用地址,当复制的值和原值发生改变时会相互影响。

3. 深拷贝

   在内存中复制一份数据,当值改变时不回互相影响。

4. 深拷贝方法

   1)JSON.stringfy与JSON.parse进行json字符串转换

    var obj = {name: '章三', age: 18};
    var obj1 = JSON.parse(JSON.stringfy(obj));

   2)使用扩展运算符

   var obj = {name: '章三', age: 18};
   var obj1 = {...obj};

5. 手写深拷贝

   function deepClone(obj) {
       // 判断obj是引用类型
       if(typeof obj !== 'object' || obj === null) {
           return obj
       }
       // 声明返回值
       let result;
       if(obj instanceof Array) {
           result = []
       } else {
           result = {}
       }
       for(let key in obj) { // 遍历递归
           // 原型方法
           if(obj.hasOwnProperty(key)) {
               result[key] = deepClone(obj[key])
           }
       }
       return result
   }