深浅拷贝

 // 浅拷贝只拷贝最外一层,更深层次对象级别的只拷贝引用
    // 深拷贝拷贝多层,每一级别的数据都会拷贝
    var obj = {
      id: 1,
      name: 'tom',
      msg:{
        age: 18
      },
      color: ['pink', 'red'],
      add: null
    }
    var o = {}
    //    --  浅拷贝
    // for(var key in obj){
    //   o[key] = obj[key];
    // }
    // es6 浅拷贝的语法糖
    Object.assign(o, obj)
    console.log(o)
 
    // 封装函数   --  深拷贝
    var newCopy = {}
    function deepCopy(newObj, oldObj) {
      for(var key in oldObj){
        // 判断数值的数据类型
        var item = oldObj[key];
        // 注意 先判断是否是数组,在判断是否是对象 
        // 判断  --  数组
        // 判断  --  对象
        // 判断  --  简单数据类型
        if(item instanceof Array){
          newObj[key] = [];
          deepCopy(newObj[key], item)
        }else if(item instanceof Object){
          newObj[key] = {}
          deepCopy(newObj[key],item)
        }else{
          newObj[key] = item;
        }
      }
    }
    deepCopy(newCopy, obj)
    console.log(newCopy)
   
     //  newCopy = JSON.parse(JSON.stringify(obj))
原文地址:https://www.cnblogs.com/J-Luck/p/12932187.html