手写js浅拷贝

29 阅读1分钟

浅拷贝赋值的区别

赋值:引用地址的拷贝,无论的简单数据类型还是复杂数据类型,都会改变原数据。

浅拷贝:一层拷贝。在浅拷贝中,修改基本数据类型不会影响原有数据的基本数据类型,修改引用数据类型会影响原有的数据类型。

深拷贝:无限层的拷贝,不影响原数据

浅拷贝的实现方式

1.concat()

       { dictValue: '', dictDataName: '全部' }
      ].concat(this.dictionary['OUTER_NET_UP_STATUS'] || [])
  1. ...展开运算符
this.$set(this.form, name, [data, ...this.form[name]])

3.Object.assign()

Object.assign(this.info, this.currentRow)

4.slice()

const value = this.value.slice()

5.修改基本数据类型不会影响原有数据的基本数据类型,修改引用数据类型会影响原有的数据类型。

const s = [
    1,
    {
        "username": "aaa"
    }
]
const s1 = [...s]
s1.username = 'gqy'
// s = [
    1,
    {
        "username": "gqy"
    }
]
//基础类型直接返回,复杂数据类型就要做判断
const shallowCopy = (target) => {
  if (typeof target === "object" && target !== null) {
    const copyTarget = Array.isArray(target) ? [] : {};
    for (let key in target) {
      if (target.hasOwnProperty(key)) {
        copyTarget[key] = target[key];
      }
    }
    return copyTarget;
  } else {
    return target;
  }
};