首先了解js的数据类型。可以分为原始数据类型和对象类型数据。
原始数据类型指的是number、string、boolean。。
对象类型数据指的是array、object以及function。。
原始类型存储的是数据本身。
对象类型存储的是对象的引用地址。
先来看一个例子。
var a = [1,2,3];
var b = a;
a.push(5);
console.log(b);
输出的是:[1,2,3,5]
因为a是一个数组对象。把a赋给b,其实是把a的引用地址复制给了b。所以a和b的引用地址是一样的,操作任何一个都会影响。
正确写法:
var a = {a:1,b:2,c:[1,2,3]};
function deepclone(obj){
var o = obj instanceof Array ? []:{};
for(var i in obj){
if(typeof(obj[i]) == "object"){
o[i] = deepclone(obj[i]);
}else{
o[i] = obj[i];
}
/*可以简化为:
o[i] = typeof(obj[i]) == "object" ? deepclone(obj[i]): obj[i]; */
}
return o;
}
var b = deepclone(a);
console.log(b);
对象类型Array的判断方法:instanceof
网友评论