数组变量类似指针变量,注意使用克隆方法避免连带改变的BUG

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

若您觉得我的博文对您有帮助,欢迎点击下方按钮对我打赏
打赏