数组中的深拷贝:
var arr = [1, 2, 3]
var arr2 = [].conact(arr) // 使用conact获取到的是新的数组
var arr3 = arr.slice() // 如果不添加参数那么直接进行深拷贝(复制一摸一样的数组)
var arr4 = Arry.form(arr) // 也是可以直接深拷贝数组
arr = [{a: 1}, {b: 2}]
var arr5 = [...arr] // 使用es6解构赋值的方式也可以实现深拷贝,如果数组内部含有对象等类型(包括数组)则实现的是浅拷贝,因为指向的内存地址相同
var arr6 = JSON.parse(JSON.stringify(arr)) // 使用这种方式就可以实现对象的深拷贝
// 数组还有其他方法 map , filter , reduce 这些也都是会造成浅拷贝的
对象中的深拷贝:
// 也可以使用上述所说的JSON方法
// 对象中如果含有对象的嵌套如:{a: {a: 1}},这样的形式使用Object.assign({}, obj)这种方式拷贝出来的对象也是浅拷贝
// 对象中使用{...obj}这种方法也会造成浅拷贝
var obj = {a: {a: 123}
var obj2 = JSON.parse(JSON.stringify(obj)) // 这种方式可以实现深拷贝