这是属于自己学习得不扎实,出现了低级错误。导致《精灵战棋》在数组操作中出现了一个恶性BUG。以下是自己现学现卖的内容,和大家分享。
数组的直接赋值属于数组的浅拷贝,JS存储对象都是存内存地址,所以浅拷贝会导致新数组和旧数组共用同一块内存地址,其中一个数组变化,另一个数组也会相应的变化。
[JavaScript] 纯文本查看 复制代码 var a =[1,2,3];
var b=a;
a[0]=30;
console.log(a,b);
//结果: [30, 2, 3] [30, 2, 3]
数组内部不含有引用类型,使用slice() 、concat() 和 assign() 方法都属于数组的深拷贝,一个数组变化,另一个数组不受影响。
[JavaScript] 纯文本查看 复制代码 var a=[1,2,3];
var b=[].concat(a);
a[0]=30;
console.log(a,b);
//结果:[30, 2, 3] [1, 2, 3]
|