为什么city属性加到arr2中的、而sum数组中也有city属性呢?好奇怪、求解释
3条回答 默认 最新
- CSDN专家-sinJack 2022-02-28 19:34关注
因为arr2=sum
sum是数组,属于引用数据类型。修改arr2的内容会同时修改sum中的内容。
这是浅拷贝
数组的直接赋值属于数组的浅拷贝,JS存储对象都是存内存地址的,所以浅拷贝会导致新数组和旧数组共用同一块内存地址,其中一个数组变化,另一个数组也会相应的变化。
数组内部不含有引用类型,使用slice() 、concat() 和 assign() 方法都属于数组的深拷贝,一个数组变化,另一个数组不受影响。
数组内部含有引用类型,使用slice() 、concat() 和 assign() 方法,非引用类型的值属于深拷贝,引入类型的值属于浅拷贝,一个数组变化,另一个也会相应的变化。
方法:for循环
数组的concat方法
concat() 方法用于连接两个或多个数组。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
使用es6的展开操作符: …arr
利用split join map方法
var arr = [0,1,2,3,4,5,6];//方法1:for循环 var newArr1 = []; for (var i = 0; i < arr.length; i++) { newArr1.push(arr[i]); } console.log(newArr1); //ok [0,1,2,3,4,5,6] //方法2:数组的concat方法 var newArr2 = [].concat(arr); console.log(newArr2); //方法3:使用ES6的展开操作符 var newArr3 = [...arr]; console.log(newArr3); //方法4:字符串的split 数组的join方法: var newArr4 = arr.join(" ").split(" ").map(function(i){return parseInt(i);}); console.log(newArr4); //方法5:Object.assign() let A = [ 1, 2, 3 ] let B = Object.assign( [], A ); console.log(B); //方法4: slice() // arrayObject.slice(start,end),该方法返回一个新的数组, //包含从 start 到 end (不包括该元素)的 arrayObject 中的元素 let A = [ 1, 2, 3 ] let B = A.slice(0);
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥100 set_link_state
- ¥15 虚幻5 UE美术毛发渲染
- ¥15 CVRP 图论 物流运输优化
- ¥15 Tableau online 嵌入ppt失败
- ¥100 支付宝网页转账系统不识别账号
- ¥15 基于单片机的靶位控制系统
- ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
- ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
- ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
- ¥15 手机接入宽带网线,如何释放宽带全部速度