JavaScript深度克隆

深度克隆函数:

function deepClone(obj){

  var str = "";

  var newobj = obj.constructor === Array ? [] : {};//通过其构造器判断克隆对象还是数组

  if(typeof obj !== 'object'){//判断数据类型
    return obj;
  } else if(window.JSON){//判断用户浏览器是否支持ES6语法

    //ES6语法
    str = JSON.stringify(obj), //序列化对象
    newobj = JSON.parse(str); //序列化还原对象
  } else {//如果不支持ES6语法
    for(var i in obj){
      newobj[i] = typeof obj[i] === 'object' ? deepClone(obj[i]) : obj[i];
    }
  }
  return newobj;
}

缺点:不兼容克隆包装类(如果浏览器支持ES6语法,函数将会把包装类返回为基本数据类型,若不支持ES6语法,则发生克隆错误)

 

原文地址:https://www.cnblogs.com/lianchenxi/p/9180933.html