# 浅拷贝

# 定义

如果值的类型是基本类型,就会拷贝一份。如果是引用类型,就会拷贝对象和数组的引用。

# 数组的浅拷贝

直接调用数组的方法。

var arr = [1, 2, 3];
var newArr = arr.concat();
var newArr1 = arr.slice();
var newArr2 = arr.splice(0);
var newArr3 = [...arr];
var [...newArr4] = arr;

# 对象的浅拷贝

  1. Object.assign 一般是用来合并两个对象,也能够用来拷贝对象。
var obj = {a: 1, b: 2};
var newObj = Object.assign({}, obj);
  1. 解构赋值
var obj = {a: 1, b: 2};
var newObj = {...obj};
var {...newObj1} = obj;

# 实现一个浅拷贝

就只需要根据类型判断是数组还是对象,然后创建出来对象,然后遍历一下原对象属性,赋值给新对象。

function copy(obj) {
    if (typeof obj !== 'object' && obj === null) return;
    var newObj = obj instanceof Array ? [] : {};
    for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
            newObj[key] = obj[key];
        }
    }
    return newObj;
}