//for in 不可以獲取不可枚舉的屬性 //hasOwnProperty 會忽略原型鏈上的屬性 //Object.getOwnPropertyNames 可以獲取可枚舉和不可枚舉的屬性 //深拷貝 ...
//數組淺拷貝
var arr=["xjz","is","a","superman"];
//slice
var new_arr=arr.slice();
new_arr[0]="zxb";
console.log("before:"+arr);
console.log("after:"+new_arr);
//concat
var new_arr=arr.concat();
new_arr[0]="bb";
console.log("before:"+arr);
console.log("after:"+new_arr);
//這個方法只能是拷貝基本類型 如果數組項是引用類型的話 只會拷貝引用
//所以當以後改變這個引用的時候 都會發生改變 很麻煩
//只是適用於存儲基本類型的數組的拷貝
//深拷貝
//如果只是簡單地數據類型 可以json解析
//function undefined null NAN Infinity 拷貝不了
var json=["xjz","super","man",{
"age":12,
"name":"xjz"
},function(){return "dadada"},undefined,null,NaN,Infinity];
var newJSON=JSON.parse(JSON.stringify(json));
所以還需要自己寫一個拷貝 啊哈哈哈哈哈
//for in 不可以獲取不可枚舉的屬性
//hasOwnProperty 會忽略原型鏈上的屬性
//Object.getOwnPropertyNames 可以獲取可枚舉和不可枚舉的屬性
//深拷貝
function deepCopy(obj){
if(!(obj && typeof obj==="object")){
return;
}
else{
var copyResult = obj instanceof Array ?[]:{};
for(var key in obj){
if(obj.hasOwnProperty(key)){
copyResult[key]=typeof obj[key] ==="object"?deepCopy
(obj[key]):obj[key];
}
}
}
return copyResult;
}
var obj={
"data":[{"age":12},{"name":"xjz"},
{"adress":"ChangChun"}],
callBack:function(){
console.log("my love is zxb");
}
};