大家好,欢迎来到IT知识分享网。
一、深浅拷贝
在使用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
以上测试代码不严谨,但是懒啊,大家如果发现问题可以留言,一起学习共同进步 哈哈哈哈哈哈哈~~~~~!!!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/29964.html