function myDeepClone(origin, target) {
var target = target || {},
toStr = Object.prototype.toString,
arrStr = '[object Arrary]';
for (var prop in origin) {
//避免拿到原型上的属性
if (origin.hasOwnProperty(prop)) {
// 区分null、[]、{}
if (origin[prop] !== null && typeof origin[prop] === 'object') {
if (toStr.call(origin[prop]) === arrStr) {
target[prop] = [];
} else {
target[prop] = {};
}
myDeepClone(origin[prop], target[prop])
} else {
target[prop] = origin[prop];
}
}
}
return target;
}
var obj = {
name: "Tylor",
age: "22",
card: {
name1: "blank",
name2: "zhifubao",
name3: {
snn: {
c: "jkdsflk"
}
}
}
};
var obj1 = {};
myDeepClone(obj,obj1);
克隆成功!!!
拓展:
hasOwnProperty()
方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性(也就是是否有指定的键)
obj.hasOwnProperty(prop)
object.prototype.toString()区别数组和对象
Object.prototype.toString.call([]) //---> "[object Array]"
Object.prototype.toString.call({}) //---> "[object Object]"
typeof 无法区别null、[ ]、{ }
详情请见,本人其它博客https://blog.csdn.net/weixin_43821550/article/details/96105266