js数组复制可以利用数组的合并方法concat()会返回一个新数组的特征 来实现复制
例如 var a=[1,2,3]; var b= a.concat();
利用 slice()也可以, 返回的也是一个新数组。
对象的深度复制可以采用自定义回调函数实现
function clone(myObj){
if(typeof(myObj) != ‘object‘) return myObj;
if(myObj == null) return myObj;
var myNewObj = new Object();
for(var i in myObj){
myNewObj[i] = clone(myObj[i]);
}
return myNewObj;
}
这种写法在复制中会存在问题:
var a=[1,2,3];
a.b = {c:‘d‘};
a中既有数组,也有对象。 使用a.concat() 只能复制其中的数组。
使用 自定义函数clone() 就会把当中的数组 也变成 对象。
应该避免这种情况发生,JSON.stringify() 也只会转换当中的数组部分
================
a.constructor == Array 判断对象是否是数组
但如果有数组 也有对象的话,例如上面的a 也会返回true
时间: 2024-10-17 16:55:00