var arr1 = new Array(1,4,3,2);
var arr2 = arr1;
arr1.sort();
document.write(arr1);
document.write(arr2);
为什么arr1排序后,arr2也跟着变呢?
如何让arr2保持原来排序?

解决方案 »

  1.   

    <html>
    <body><script type="text/javascript">function sortNumber(a, b)
    {
    return a - b
    }var arr = new Array(6)
    arr[0] = "10"
    arr[1] = "5"
    arr[2] = "40"
    arr[3] = "25"
    arr[4] = "1000"
    arr[5] = "1"document.write(arr + "<br />")
    document.write(arr.sort(sortNumber))</script></body>
    </html>
      

  2.   

    楼上的乱贴代码~~~找到方法了..var arr1 = new Array(1,4,3,2);
    var arr2 = arr1.slice(0);
    arr1.sort();
    document.write(arr1);
    document.write(arr2);
    这样arr2就保持原来的排序了~
      

  3.   

    参考:探析 JavaScript 中令人困惑的变量赋值http://www.the6cn.com/web/javascript/872.shtml
      

  4.   

    arrayObj.slice(0); //返回数组的拷贝数组,注意是一个新的数组,不是指向
    arrayObj.concat(); //返回数组的拷贝数组,注意是一个新的数组,不是指向
    var arr2 = arr1;  这个是将 arr2指向了arr1 所以 arr1排序, arr2也排序了
      

  5.   

    因为你的arr2 并没有new一个Array()出来, 实际上是一个数组的指针, 指向的arr1。 数组赋值就是这样的. 不new就是指针. 2L的方法, 实际上slice回来的也是一个new 的array. 
      

  6.   

    slice(0);
    可以
    new Array(arr1);
      

  7.   

    arr2是指向arr1的引用,因为arr1是一个数组对象。
    arr2有点像是C++中指针一样的。