ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
object和array类型的变量为引用类型,也就是说其存储的实际上并不是具体的值而是一个指向堆内存的地址 因此当我们把一个引用类型如‘数组’,赋值给另一个变量时,实际上是把另一个变量指向了与之相同的地址,当我们改变其中一个时,实际上改变了堆内存中的存储内容 ,相应的所有指向该地址的数组都发生了变化: 推荐jquery的深拷贝 ``` var a = [ { "specs1":"蓝色,红色,紫色,黄色", "specs2":"大,中,小", }, { "specs1":"粉色,红色,紫色,黄色", "specs2":"大,中,小", }, ]; b=[]; $.extend(true, b, a); b[0]['specs1']="哈哈"; console.log(a);//[{"specs1":"蓝色,红色,紫色,黄色", "specs2":"大,中,小",},{"specs1":"粉色,红色,紫色,黄色", "specs2":"大,中,小",}] console.log(b);//[{"specs1":"哈哈", "specs2":"大,中,小",},{"specs1":"粉色,红色,紫色,黄色", "specs2":"大,中,小",}] ``` 例如: ``` let arr = [1, 2, 3, 4, 5] let arrCopy = arr // [1, 2, 3, 4, 5] let arr = [1, 2, 3, 4, 5] let arrCopy = arr // [1, 2, 3, 4, 5] arrCopy.push(6) console.log('arrCopy', arrCopy) // arrCopy [1, 2, 3, 4, 5, 6] console.log('arr', arr) // arr [1, 2, 3, 4, 5, 6] ``` >[danger]注意深层级还是不能去掉引用 ``` var a = [ { "specs1":"蓝色,红色,紫色,黄色", "specs2":"大,中,小", } ]; var b=a.concat(); b[0]['specs1']="哈哈"; console.log(a);//[{"specs1":"哈哈", "specs2":"大,中,小",}] ``` 有时我们并不想要类似的事情发生要如任何解决呢?下面介绍两种简单的方法 1、利用concat()方法 ``` let arr = [1, 2, 3, 4, 5] let arrCopy = arr.concat() arrCopy.push(6) console.log('arrCopy', arrCopy) // arrCopy [1, 2, 3, 4, 5, 6] console.log('arr', arr) // arr [1, 2, 3, 4, 5] ``` 2、利用slice()方法 ``` let arr = [1, 2, 3, 4, 5] let arrCopy = numbers.slice(0, numbers.length) // 下方两种方式也一样可以实现效果 // let arrCopy = numbers.slice(0) // let arrCopy = numbers.slice() arrCopy.push(6) console.log('arrCopy', arrCopy) // arrCopy [1, 2, 3, 4, 5, 6] console.log('arr', arr) // arr [1, 2, 3, 4, 5] ``` 3、new Array()方式来实现 ``` let arr = [1, 2, 3, 4, 5] let arrCopy = new Array(...arr) arrCopy.push(6) console.log('arrCopy', arrCopy) // arrCopy [1, 2, 3, 4, 5, 6] console.log('arr', arr) // arr [1, 2, 3, 4, 5] ``` 4、map方式实现 ``` let arr = [1, 2, 3, 4, 5] let arrCopy = arr.map(item => item) arrCopy.push(6) console.log('arrCopy', arrCopy) // arrCopy [1, 2, 3, 4, 5, 6] console.log('arr', arr) // arr [1, 2, 3, 4, 5] ``` 5、for循环与forEach ``` let arr = [1, 2, 3, 4, 5] let arrCopy = [] for (let i = 0; i < arr.length; i++) { arrCopy.push(numbers[i]) } arrCopy.push(6) console.log('arrCopy', arrCopy) // arrCopy [1, 2, 3, 4, 5, 6] console.log('arr', arr) // arr [1, 2, 3, 4, 5] ``` ``` let arr = [1, 2, 3, 4, 5] let arrCopy = [] arr.forEach((item) => arrCopy.push(item)) arrCopy.push(6) console.log('arrCopy', arrCopy) // arrCopy [1, 2, 3, 4, 5, 6] console.log('arr', arr) // arr [1, 2, 3, 4, 5] ``` [原文](https://blog.csdn.net/SupperPigger/article/details/103166076?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-103166076-blog-81810349.t5_download_comparev1&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-103166076-blog-81810349.t5_download_comparev1&utm_relevant_index=1)