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

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

你好,先说一个简单的概念,基本类型赋值 就是独立的,比如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 这是两个独立苹果.
但假设打开门我们发现 里面不止有基本数据类型还有引用数据类型时,我们复制的引用类型实际还是一个地址.

