首先下面的一段是网上经常说的错误实现:
不少人可能直接就用等号进行赋值了:
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()返回也是数组。
var array1 = new Array("1","2","3");
var array2;
array2 = array1.slice(0);
array1.length = 0;
alert(array2); //返回1、2、3
而我要说的其实是对上面的一个补充。
比如一个数组。
var myList = [];
var itemList = [];
itemList[0] = new item(1,'第一个');
myList[myList.length] = new myInfo('1','我的第一个信息',itemList); //这里的itemList又是一个数组
function item(id,name) {
this.id = id;
this.name = name;
}
于是在此情况下单纯的使用slice复制数组就不行了。因为这些个对象也是引用。
所以要想复制这样的数组。就需要如此:
var Extend = function(destination, source) {
for (var property in source) {
destination[property] = source[property];
}
return destination;
}
var tmpList = []; //新的数组
for(var obj in myList) {
tmpList [tmpList .length] = Extend(null,obj); //extent的第一个参数是目标对象,第二个是原对象
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。