首先了解js的數(shù)據(jù)類型。可以分為原始數(shù)據(jù)類型和對象類型數(shù)據(jù)。
原始數(shù)據(jù)類型指的是number、string、boolean。。
對象類型數(shù)據(jù)指的是array、object以及function。。
原始類型存儲的是數(shù)據(jù)本身。
對象類型存儲的是對象的引用地址。
先來看一個例子。
var a = [1,2,3];
var b = a;
a.push(5);
console.log(b);
輸出的是:[1,2,3,5]
因為a是一個數(shù)組對象。把a賦給b,其實是把a的引用地址復(fù)制給了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