var tArray=new Array(1,2,3,4,5,6) 
var copy=tArray;writeLine('tArray.length='+tArray.length)
writeLine('tArray='+tArray.join(','))
writeLine('')writeLine('copy.length='+copy.length)
writeLine('copy='+copy.join(','))
writeLine('---------------------------------')copy.length=0;
//原以为copy.length=0;只是改变了copy的值,没想到tArray也变了。
//tArray.length=0writeLine('tArray.length='+tArray.length)
writeLine('tArray='+tArray.join(','))
writeLine('')writeLine('copy.length='+copy.length)
writeLine('copy='+copy.join(','))function writeLine(str){
  document.write(str+'<br>');
}
===============================================
结果输出tArray.length=6
tArray=1,2,3,4,5,6copy.length=6
copy=1,2,3,4,5,6
---------------------------------
tArray.length=0
tArray=copy.length=0
copy=============================================
从上面的输入结果来看,
在copy.length=0; 的时候,不仅改变了copy的值,tArray的值也改变了,
如果此处换成 tArray.length=0 ,输出结果是一样的。由此得出 var copy=tArray;tArray赋值给新的变量后,copy与tArray指向是同一个内存地址。
改变length的话,copy和tArray,2个变量的值都会改变。谢谢各位路过的不吝赐教

解决方案 »

  1.   

    那怎样做一份tArray的Copy,然后修改Copy的那份而不影响tArray呢?
      

  2.   

    你这样给数组赋值 其实就相当于创建了一个指针 指向同一个内存
    想copy一份的话 就用循环依次给数组的每一个元素赋值
      

  3.   

    var copy=tArray;
    这是对象赋值,按地址引用,传递的是地址。相当于对原对象起个别名。所以改变新名就等于改变原对象。如果是var copy=tArray.length;
    是对象下面的数据,则为值引用,传递的是实际的数据,相当于一个备份。改变时互不影响。
      

  4.   

    <script type="text/javascript">
    var tArray=new Array(1,2,3,4,5,6)  
    var copy=tArray.slice();
    copy[0]="theforever0";
    copy[1]="theforever1";
    copy[2]="theforever2";
    alert('原数组:'+tArray.join()+'   新数组:'+copy.join());
    </script>
      

  5.   

    也不太准确吧!
    http://www.cftea.com/c/2010/07/TKE282SFVCKL2RLS.asp
      

  6.   

    这里的不准确,试试
    var v1 = []
    var v2 = {};
    var v3 = {};
    function foo(_v1, _v2, _v3)
    {
        _v1[1] = 1;
        _v2.a = [2];
        _v3.b = {a:3}
    }foo(v1, v2, v3);
    console.info(v1);
    console.info(v2);
    console.info(v3);
      

  7.   


    slice方法对类似int值类型和字符串可以实现拷贝,但是如果数组内存放的是一个引用类型的对象则还是指向原数组的,所以此时必须使用深度拷贝对Array.prototype扩展clone方法
      

  8.   

    以前写的一个克隆数组的方
    ///为数组添加克隆自身的方法,使用递归可用于多级数组
      Array.prototype.clone=function(){
        var newArr=new Array();
        for(var i=0;i<=this.length-1;i++)
        {
           var itemi=this[i];
           if(itemi.length && itemi.push) itemi= itemi.clone();
           //else if(typeof(itemi)=="object") itemi=objClone(itemi);
           newArr.push(itemi);
        }
        return newArr;
      }