小菜和它的 深拷贝 故事

142 阅读1分钟

深拷贝方法

法一:

JSON.stringify() JSON.parse()

var str = ''
var p = {
  name: 'xw',
  weight: '123kg'
}
// 前后端数据交互的类型 json 是一个字符串
var person = '{name: "xw", weight: "123kg"}'
// JSON.parse 字符串转对象
// JSON.stringify 对象转字符串
var p1 = JSON.stringify(p)
console.log(p);
console.log(p1);
var p2 = JSON.parse(p1);
console.log(p2);
var p3 = JSON.stringify(p);
console.log(p3);
p3 = JSON.parse(p3);
console.log(p3);
p.name = 'wxc';
console.log(p)
console.log(p3);

法二

deepClone()

    function deepClone(obj){
  // 判断obj的类型 分别声明数组或对象
  var objClone = Array.isArray(obj) ? [] : {};
  if(obj && typeof obj==="object"){
    for(key in obj){
      //判断obj子元素是否为对象,如果是,递归复制
      if(obj[key] && typeof obj[key] === "object"){
        objClone[key] = deepClone(obj[key]);
      }else{
        //如果不是,简单复制
        objClone[key] = obj[key];
      }
    }
  } else {
    // 非数组或对象 直接赋值返回
    objClone = obj;
  }
  return objClone;
}