var a = [1,2,3,4,5,6], b=a, c = b; c[0]=11; console.log(a[0]);
此时输出a[0],为什么也变成11了呢?
有没有办法让他还是保持他原来的值1?也就是让a,b,c各自独立。。
如果数组内存储的是简单类型使用b= a.slice(); c=a.slice();这时候进行了一次数据的复制操作,如果数组内是对象类型,复制的是其中对象引用,所以在对其中的对象进行操作的时候,共享的对象本身都会发生变化,但是单一的改变某一个数组内的引用不会改变其他数组的内容。
数组是引用对象,我没法画图给你解释,这么说 a[0]原来指向1
b=a后 b将指向a对象引用的地址(所以此时修改b对象的值会影响a的值)
c = b 同理c--->b----a(修改c对象的值会影响a的值)也就是他们不是创建了新的对象而是引用堆中地址,共用一块内存区域,修改一个会影响同一区域的所有对象。