深拷贝、浅拷贝的实现方法

1、json方法

var cloneObj=JSON.parse(JSON.stringify(obj));

不足:1、无法拷贝 对象中的方法属性  2、无法拷贝 对象中值为undefined的属性

2、jquery方法

jQuery.extend(true,{},obj);  //true为深拷贝,false为浅拷贝,其实是把第二个对象上面的属性和对象覆盖到第一个对象上面

不足:1、需要引用jQuery库  2、无法拷贝 对象中值为undefined的属性

3、使用递归实现的方式

//使用递归实现深拷贝函数
function deepClone(obj) {
    var objClone = Array.isArray(obj) ? [] : {}
    if (obj && typeof obj === 'object') {
        for (key in obj) {
            if (obj.hasOwnProperty(key)) {
            //判断obj的子元素是否为object对象,如果是则就递归拷贝
                if (obj[key] && typeof obj[key] === 'object') {
                    objClone[key] = deepClone(obj[key])
                } else {
                    //如果不为对象就直接拷贝
                    objClone[key] = obj[key]
                }
            }
        }
    }
    return objClone
}

不足:代码比其他两种方式复杂。

 4、浅拷贝方法

Object.assign()  这个方法的作用是把对象的枚举元素都复制到第一个参数对象里。

let a = {
        url: '996'
}
let b  = {
        name: '阿珍',
        url: a
}

let c = Object.assign({}, b)
a.url = a.url + '.icu'
console.log(c)
// 输出 c={
      name: "阿珍",
      url: {
        url:"996.icu"
      }
    }

 

posted @ 2020-03-30 18:12  ZJTL  阅读(361)  评论(0编辑  收藏  举报