简单实现深拷贝

82 阅读1分钟

一、JSON转换

var targetObj = JSON.parse(JSON.stringify(copyObj)) 
let arr4 = JSON.parse(JSON.stringify(arr))

(1)如果对象里有函数,函数无法被拷贝下来

(2)无法拷贝copyObj对象原型链上的属性和方法

(3)当数据的层次很深,会栈溢出

二、递归函数

function deepCopy( source ) { 
    if (!isObject(source)) return source; //如果不是对象的话直接返回 
    let target = Array.isArray( source ) ? [] : {} //数组兼容 
    for ( var k in source ) { if (source.hasOwnProperty(k)) { 
        if ( typeof source[ k ] === 'object' ) { 
            target[ k ] = deepCopy( source[ k ] ) 
            } else { 
            target[ k ] = source[ k ] 
            } 
          } 
      } 
      return target 
    } 
function isObject(obj) { 
    return typeof obj === 'object' && obj !== null;
}