因為javascript分原始類型與引用類型(與java、c#類似)。Array是引用類型,是以直接用=号指派的話,隻是把源數組的位址(或叫指針)指派給目的數組,并沒有實作數組的資料的拷貝。另外對一維數組和多元資料的深拷貝實作方式是不一樣的,下面分别讨論。
一、 錯誤實作
var array1 = new Array("1","2","3");
var array2;
array2 = array1;
array1.length = 0;
alert(array2); //傳回為空
這種做法是錯的,因為javascript分原始類型與引用類型(與java、c#類似)。Array是引用類型。array2得到的是引用,是以對array1的修改會影響到array2。
二、 一維數組的實作方式:
使用slice() 或者 concat()來實作一維數組的深拷貝,但這種方法隻适用于一維數組,對多元數組無效。
可使用slice()進行複制,因為slice()傳回也是數組。
var array1 = new Array("1","2","3");
var array2;
array2 = array1.slice(0);
array1.length = 0;
alert(array2); //傳回1、2、3
注意concat()傳回的并不是調用函數的Array,而是一個新的Array,是以可以利用這一點進行複制。
var array1 = new Array("1","2","3");
var array2;
array2 = array1.concat();
array1.length = 0;
alert(array2); //傳回1、2、3
三、 多元數組的JS函數實作方式:

function deepcopy(obj) {
var out = [],i = 0,len = obj.length;
for (; i < len; i++) {
if (obj[i] instanceof Array){
out[i] = deepcopy(obj[i]);
}
else out[i] = obj[i];
}
return out;
}
//下面是測試代碼
var weekArray = new Array(7);//數組第一維
var timeTableArray = new Array(); //數組第二維
var lineArray = new Array(4); //數組第三維
lineArray[0] = "1_a";
lineArray[1] = "1_b";
lineArray[2] = "1_c";
timeTableArray.push(lineArray);
weekArray[0] = deepcopy(timeTableArray);
//清空,并添加其他星期的資料
lineArray.splice(0,lineArray.length);
timeTableArray.splice(0,timeTableArray.length);
lineArray[0] = "7_a";
lineArray[1] = "7_b";
lineArray[3] = "7_d";
timeTableArray.push(lineArray);
weekArray[7] = deepcopy(timeTableArray);
alert("weekArray=" + weekArray[0]);//傳回 "1_a,1_b,1_c,"
alert("weekArray=" + weekArray[7]);//傳回 "7_a,7_b,,7_d"

四、 多元數組的jquery實作方式:
把上述的deepcopy函數用下面的函數替代即可
weekArray[0] = $.extend(true, {}, timeTableArray);
來源:http://www.cnblogs.com/matthew-2013/p/3524297.html