区别主要在于 深拷贝意味着当B复制了A的时候,如果修改A,B也跟着改变的话,那就是深拷贝;如果B没有跟着改变的话,那就是浅拷贝。
这就相当于当你使用JS的基本类型时,A和B的名和值都是存在栈内存里的,A在栈内存的存放方式相当于 A(name); 1(value);如果B复制A的话,就相当于添加一行新的内存在栈里,即在A的下面添加 B(name); 1(value);所以他们之间互不影响,就是浅拷贝。
当使用对象的时候,A和B的名是存在栈内存里的,同时还存了一个对应的堆地址在栈里用来指向堆内存的值。
A在栈内存的存放方式相当于 A(name):val的堆地址;
所以B复制A的时候,B相当于 B(name):val的堆地址;
同时A的值是存放在在堆内存里面的,存放方式为 1(value);
所以可知,不管堆内存的值怎样变化,栈中对应的地址都不会变,所以当A的值改变时,B的值也会改变,这是浅拷贝。