∵ING 2023-05-08 01:11 采纳率: 82.6%
浏览 28
已结题

都是浅拷贝,对象里面都是基本数据类型,为什么第一个会改变源数据

let a=row//第一个
let a={...row}//第二个
a.id=0
//第一个row会跟着变,第二个row不会跟着变
//row就是下图打印出来的②
//{...row}就是下图答应出的①

img

  • 写回答

2条回答 默认 最新

  • 白云苍狗い 2023-05-08 08:27
    关注

    你好,先说一个简单的概念,基本类型赋值 就是独立的,比如a=苹果 b=a 这是两个苹果 你咬a一口 b不会有变换
    引用类型是存放的是一个地址 比如 obj={a:苹果} obj是一个地址 他指向{a:苹果} 当你让b=obj时 b就获得了这个地址 b也指向{a:苹果} 此时只有一个苹果
    回到你问题,你的row是个对象属于引用类型数据,引用类型你可理解为一把指针 它指向一个地址
    你把 row赋值给了a 此时a也是一个指针, 并且他俩都指向同一个地址 所以不管那个修改地址内容 他俩都会变
    第二个问题 实际对于 只有一层的对象 也就是子属性都是基本类型的对象 你用...结构 实际是深拷贝
    ...等于挨个取出对象中的东西 还是举个例子 a={name:'苹果'} b={...a} 这个过程你可以理解为首先我们根据a的指针找到了{name:'苹果'} 之后我们把这个对象的门打开 把里面的东西都复制出来一份 现在{name:'苹果'}有一个苹果 我们就复制一个苹果这是新的苹果给了b 这是两个独立苹果.
    但假设打开门我们发现 里面不止有基本数据类型还有引用数据类型时,我们复制的引用类型实际还是一个地址.

    img

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月16日
  • 已采纳回答 5月8日
  • 修改了问题 5月8日
  • 修改了问题 5月8日
  • 展开全部

悬赏问题

  • ¥15 单纯型python实现编译报错
  • ¥15 c++2013读写oracle
  • ¥15 c++ gmssl sm2验签demo
  • ¥15 关于模的完全剩余系(关键词-数学方法)
  • ¥15 有没有人懂这个博图程序怎么写,还要跟SFB连接,真的不会,求帮助
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音