简单的概念:
- 浅拷贝:将原对象/数组的引用赋值给新对象,新对象/数组只是一个引用
- 改变新对象的时候,同时改变原对象
- 深拷贝:创建一个新的对象/数组,将原对象/数组的各项属性的值拷贝过来
- 改变新对象的时候,不改变原对象
只对第一层做拷贝:浅拷贝
对数组(基本类型数组)
直接遍历
let arr = [1,2,3,4] let newArray=[] 遍历{ newArray.push(item) }
slice()
let newArray = arr.slice()
- concat()
let newArray = arr.concat()
对对象
- 直接遍历
Object.assign()
var obj = {name: 'ted', age:23} var copyObj = Object.assign({}, obj)
- 扩展运算符…(数组同样适用)
let copyObj = {...obj}
深拷贝:拷贝所有层级
JSON.parse(JSON.stringify(XXXX))
let arr = [ {number1: 1}, {number2: 2}, {number3: 3} ] let copyArr = JSON.parse(JSON.stringify(arr))
递归
function myCopy(obj) { let copyObj = obj.constructor === Array ? [] : {} for (let i in obj) { if (typeof obj[i] === 'object') { copyObj[i] = myCopy(obj[i]) } else { copyObj[i] = obj[i] } } }