浅拷贝和深拷贝

对象浅拷贝

1、 Object.assign()

var obj = {
      name: 'zhang',
      info: {
        age: 10,
      },
      grade: [10, 20]
    }
var copyObj = Object.assign({}, obj)

2、es6 展开运算符...

var obj = {
      name: 'zhang',
      info: {
        age: 10,
      },
      grade: [10, 20]
    }
var copyObj =  { ... obj }

数组浅拷贝

1、Array.slice() 数组截取,返回新的数组

var arr = [10, {age: 1, info: {name: 'zhangsan'}}]
var copyArr = arr.slice()

2、Array.concat() 数组合并

var arr = [10, {age: 1, info: {name: 'zhangsan'}}]
var copyArr = arr.concat([], arr)

3、es6 展开运算符...

var arr = [10, {age: 1, info: {name: 'zhangsan'}}]
var copyArr = [...arr]

递归实现对象深拷贝

拷贝的时候判断一下属性值的类型,如果是对象,我们递归调用深拷贝函数
var obj = {
  name: 'zhang',
  info: {
    age: 10,
  },
  grade: [10, 20]
}

var deepCopy = function(obj) {
    if (typeof obj !== 'object') return;
    var newObj = obj instanceof Array ? [] : {};
    for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
            newObj[key] = typeof obj[key] === 'object' ? deepCopy(obj[key]) : obj[key];
        }
    }
    return newObj;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容