一、深浅拷贝
在使用JS对数组或者object进行操作的时候,如果只是简单的将它赋予其他变量,那么只要更改其中的任何一个,然后其他的也会跟着改变
举例说明:
let arr = [1, 2, 3] let arr2 = arr arr[0] = 3 console.log(arr[0])//输出3 console.log(arr2[0])//输出3 let obj = { name: 'obj' } let obj2 = obj obj2.name='obj2' console.log(obj.name)//输出obj2 console.log(obj2.name)//输出obj2
解决思路:创建一个新的对象(数组)使用遍历的方法把原有的数据加到新的对象(数组)里面
解决代码:
function deepclone(obj){ let data if(Object.prototype.toString.call(obj)==='[object Array]'){ data=[] for (let index = 0; index < obj.length; index++) { data.push(deepclone(obj[index])) } }else if(Object.prototype.toString.call(obj)==='[object Object]'){ data={} for(let key in obj){ data[key]=deepclone(obj[key]) } }else { return obj } return data }
测试代码:
let obj1 = {
name: 'obj1',
}
let obj2 = deepclone(obj1)
console.log(obj2.name)//输出obj1
obj1.name='obj'
console.log(obj2.name)//还是输出obj1
let arr = [1, 2, 3]
let arr2 =deepclone(arr)
console.log(arr2[0])//输出1
arr[0]=9
console.log(arr2[0])//还是输出1
以上测试代码不严谨,但是懒啊,大家如果发现问题可以留言,一起学习共同进步 哈哈哈哈哈哈哈~~~~~!!!