浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用。 var obj = { id:1, name:'andy' }; var o = {}; for(var key in obj){ o[k] = obj[k] } console.log(o); 修改o会影响以前的obj var obj = { id:1, name:'andy', msg:{ age:18 } }; var o = {}; for(var key in obj){ o[k] = obj[k] } console.log(o); o.msg.age=20; console.log(obj); ES6新增方法Object.assign(target,...sources)可以实现浅拷贝 Object.assign(o,obj); 深拷贝拷贝多层,每一级别的数据都会被拷贝。(递归的思想) var obj = { id:1, name:'andy', msg:{ age:18 }, color:['pink','red'] }; var o = {}; //封装函数 function deepCopy(newobj,oldobj){ for(var k in oldobj){ //判断我们的属性值属于哪种数据类型 //1.获取属性值 var item = oldobj[k] //2.判断这个值是否是数组 if(item instanceof Array){ newobj[k]=[]; deepCopy(newobj[k],item) } //3.判断这个值是否是对象 else if(item instanceof Object){ newobj[k]={}; deepCopy(newobj[k],item) } //4.属于简单数据类型 else{ newobj[k]=item } } } deepCopy(o,obj)