BUG展示:
motherArr=[1,2,3,4,5,6];
sonArr=motherArr;
sonArr.splice(0,1);
alert(sonArr); //2,3,4,5,6
alert(motherArr); //2,3,4,5,6
sonArr删除第一个元素的同时,motherArr也随着改变了,可见数组变量的指向方式类似指针。
解决办法:
由于数组本身没有提供克隆方法,所以需要自行扩展一个:
-
方法一:
Array.prototype.clone=function(){ var a=[]; for(var i=0,l=this.length;i<l;i++) a.push(this[i]); return a; }
-
方法二:
Array.prototype.clone=function(){ return this.slice(0); }
-
方法三:
Array.prototype.clone=function(){ return [].concat(this); } //或者 Array.prototype.clone=function(){ return this.concat(); }
可见concat其实可以当clone来用,完美解决:
motherArr=[1,2,3,4,5,6];
sonArr=motherArr.concat();
sonArr.splice(0,1);
alert(sonArr);
alert(motherArr);
参考:http://www.jb51.net/article/22650.htm
若您觉得我的博文对您有帮助,欢迎点击下方按钮对我打赏
打赏

