//[js] 写一个方法,实现浅拷贝 //浅拷贝 assign var a = { name: 'zhangsan', }; var b = Object.assign({}, a); b.name = 'lisi'; console.log(a.name);//zhangsan //但是如果拷贝的源对象当中包含对象时,OBject.assign()方法只会拷贝对象的引用地址,而不会拷贝对象的属性值 var c = { name: 'zhangsan', age: 18, address: { city: 'beijing', street: 'xizhimen' } }; var d = Object.assign({}, c); d.name = 'lisi'; d.address.city = 'shanghai'; console.log(c.name);//zhangsan console.log(c.address.city);//shanghai //[js] 写一个方法,实现深拷贝 //如果要拷贝的对象中包含对象,就需要深拷贝了,一般使用原生的方法JSON.parse(JSON.stringify(obj)) var j1={ value: 'a', obj3:{ value2: 'c' }, arr:[1,2,3] } var obj2 = JSON.parse(JSON.stringify(obj1)); obj2.obj3.value2='b'; obj2.arr[0]= "a"; console.log(obj2);//{ value: 'a', obj3:{ value2: 'b' }, arr:['a',2,3] } console.log(obj1);//{ value: 'a', obj3:{ value2: 'c' }, arr:[1,2,3] } 没有发生改变 //实现一个对数组和对象的深拷贝的方法 var obj={ name: 'znl', age: 18, friend:{ name: 'borys', age: 20 }, arr:[1,2,[3,4]] } function copy(obj){ var type=Object.prototype.toString.call(obj); if(!(type == '[object Array]' || type == '[object Object]')){ return 'Type Error!'; } return JSON.parse(JSON.stringify(obj)); } var obj2= copy(obj); console.log(obj.friend === obj2.friend)//false console.log(obj.arr === obj2.arr)//false