weixin_54527929 2022-02-28 19:25 采纳率: 25%
浏览 27
已结题

为什么city属性加到arr2中的、而sum数组中也有city属性呢?好奇怪、求解释

img

为什么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);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月9日
  • 已采纳回答 3月1日
  • 创建了问题 2月28日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度