function deepClone(initalObj, finalObj) {
var obj = finalObj || {};
for (var i in initalObj) {
var prop = initalObj[i]; // 避免相互引用对象致使死循环,如initalObj.a = initalObj的状况
if (prop === obj) {
continue;
}
if (typeof prop === 'object') {
obj[i] = (prop.constructor === Array) ? [] : {};
arguments.callee(prop, obj[i]); // 调用自身
} else {
obj[i] = prop;
}
}
return obj;
}
let initialObj = { a: '1', b: { name: { first: 'bob', last: 'zhou' }, age: 10 } }
let myObj = deepClone(initialObj)
console.log(myObj)
initialObj.b.name.first = 'chris'
console.log(initialObj)
console.log(myObj)
从打印结果能够看出 拷贝的对象不会被改变对象
3>> 单层拷贝blog
object.assign() 递归
{...obj} string
这两种都是单层深拷贝, 意思就是{age:10,name:'bob'}这种能够深拷贝 it
{name:{first:'lily',last:'zhang'}}针对这种内层的不会被深拷贝 仍是拷贝其引用io