浅拷贝方式(对象只有一层属性就是深拷贝,多层的就是浅拷贝):
es6的 {...obj}
和Object.assign(obj)
深拷贝方式(所以层都进行拷贝):
一般方式:
jquery库 $.extend(true,[],obj) lodash库 _.cloneDeep(obj) JSON.parse(JSON.stringify(obj))
递归方式:
原理:传入对象 判断是对象还是数组 创建x[]或{} 遍历对象 hasOwnProperty存在某个属性 赋值空对象=递归这个方法 有下一层对象 递归调用 不存在下一次 return x
//递归实现深拷贝 function deepClone(obj) { //判断是对象函数数组 创建空对象/数组 var objClone = Array.isArray(obj) ? [] : {}; //引用类型 if(obj && typeof obj === 'object') { //遍历对象 存在这个属性 赋值空对象 = 递归这个方法 for(key in obj) { if(obj.hasOwnProperty(key)) { if(obj[key] && typeof obj[key] === "object") {//有下一层对象 objClone[key] = deepClone(obj[key]) } else { //没有下一层 objClone[key] = obj[key]; } } } } return objClone; }
深拷贝数组(从0 开始拷贝):
arr.slice(0)