Javascript 复制数组实现代码

  一、 错误实现

  不少人可能直接就用等号进行赋值了:

  

复制代码 代码如下:

  var array1 = new Array("1","2","3");

  var array2;

  array2 = array1;

  array1.length = 0;

  alert(array2); //返回为空

  这种做法是错的,因为javascript分原始类型与引用类型(与java、c#类似)。Array是引用类

  型。array2得到的是引用,所以对array1的修改会影响到array2。

  二、 使用slice()

  可使用slice()进行复制,因为slice()返回也是数组。

  

复制代码 代码如下:

  var array1 = new Array("1","2","3");

  var array2;

  array2 = array1.slice(0);

  array1.length = 0;

  alert(array2); //返回1、2、3

  三、 使用concat()

  注意concat()返回的并不是调用函数的Array,而是一个新的Array,所以可以利用这一点进行复制。

  

复制代码 代码如下:

  var array1 = new Array("1","2","3");

  var array2;

  array2 = array1.concat();

  array1.length = 0;

  alert(array2); //返回1、2、3

  四、 测试

  

复制代码 代码如下:

  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

  <html>

  <head>

  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

  <title>Array Test</title>

  <script type="text/javascript">

  var array1;

  var array2;

  function clone1() {

  array1 = new Array("1","2","3");

  array2 = array1;

  array1.length = 0;

  alert(array2);

  }

  function clone2() {

  array1 = new Array("1","2","3");

  array2 = array1.slice(0);

  array1.length = 0;

  alert(array2);

  }

  function clone3() {

  array1 = new Array("1","2","3");

  array2 = array1.concat();

  array1.length = 0;

  alert(array2);

  }

  </script>

  </head>

  <body>

  <input type="button" value="clone1" onclick="clone1()" /><br />

  <input type="button" value="clone2" onclick="clone2()" /><br />

  <input type="button" value="clone3" onclick="clone3()" /><br />

  </body>

  </html>

  在IE8及FF3.0下均通过测试