-
let obj = {
a: 100,
b: [10, 20, 30],
c: {
x: 10,
},
d: /^\d+$/,
};
// ES6出的
let obj2 = {
...obj
};
-
let obj = {
a: 100,
b: [10, 20, 30],
c: {
x: 10,
},
d: /^\d+$/,
};
let obj2 = {};
for (let key in obj) {
// hasOwnProperty()方法可以檢測對象是否有某個屬性,比如檢測obj是否有a,b,c,d,這些屬性
if (!obj.hasOwnProperty(key)) break;
obj2[key] = obj[key];
}
-
let obj = {
a: 100,
b: [10, 20, 30],
c: {
x: 10,
},
d: /^\d+$/,
};
let obj2 = JSON.parse(JSON.stringify(obj));
//=>弊端?
//如何對象中有 正則表達(dá)式 函數(shù) 日期對象 會導(dǎo)致出現(xiàn)問題确虱,
// JSON.stringify(obj)的結(jié)果是空白或者異常
let obj = {
a: 100,
b: [10, 20, 30],
c: {
x: 10,
},
d: /^\d+$/,
};
//封裝一個方法
function deepClone(obj) {
//=>過濾特殊情況
if (obj === null) return null;
if (typeof obj !== "object") return obj;
if (obj instanceof RegExp) {
return new RegExp(obj);
}
if (obj instanceof Date) {
return new Date(obj);
}
//=>不直接創(chuàng)建空對象目的:克隆的結(jié)果和之前保持相同的所屬類
let newObj = new obj.constructor();
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
newObj[key] = deepClone(obj[key]);
}
}
return newObj;
}
// 調(diào)用和測試
let obj2 = deepClone(obj);
console.log(obj, obj2);
console.log(obj === obj2);
console.log(obj.c === obj2.c);