-
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));
//=>弊端?
//如何对象中有 正则表达式 函数 日期对象 会导致出现问题,
// JSON.stringify(obj)的结果是空白或者异常
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);
}
//=>不直接创建空对象目的:克隆的结果和之前保持相同的所属类
let newObj = new obj.constructor();
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
newObj[key] = deepClone(obj[key]);
}
}
return newObj;
}
// 调用和测试
let obj2 = deepClone(obj);
console.log(obj, obj2);
console.log(obj === obj2);
console.log(obj.c === obj2.c);