在日常开发当中那面会遇到对象拷贝问题
一、对象浅拷贝(shallowClone)
-  使用 Object.assign把源对象自身的、可枚举的属性拷贝到目标对象上var person = {name: '张三',age: 18,sex: '男',hobbies: ['篮球', '足球', '排球'],sayName: function () {console.log(this.name);},play: null,info: {address: '四川成都',child: [{id: 1,name: '张小三',age: 5,sex: '女'}]} };var newPerson = Object.assign({}, person); console.log(newPerson);拷贝后新旧对象的对比: 
  但是当我操作对象里面更深层次的属性之后: 
  
 结果把源数据给改了
  
-  使用 for in遍历拷贝function shallowClone(target, origin) {var tar = target || {};for (var key in origin) {// 过滤原型上的属性origin.hasOwnProperty(key) && (target[key] = origin[key]);}return tar; }
二、深拷贝(deepClone)
-  使用 for in循环遍历 + 递归- 判断是不是原型上的属性
- 判断是引用值(注意:typeof null === 'object')还是原始值
- 如果是引用值就递归继续拷贝,否则就直接拷贝
- 把拷贝好的对象 return出去
 function deepClone(target, origin) {var target = target || {},toStr = Object.prototype.toString,arrType = '[object Array]';for (var key in origin) {if (origin.hasOwnProperty(key)) {if (typeof origin[key] === 'object' && origin[key] !== null) {target[key] = toStr.call(origin[key]) === arrType ? [] : {};deepClone(target[key], origin[key]);} else {target[key] = origin[key];}}}return target; }当我操作拷贝之后的对象: 
  
 结果源对象不会发生改变:
  
-  简单粗暴直接 JSON.parse(JSON.stringify(originObj));function deepClone(target, origin) {var target = target || {};target = JSON.parse(JSON.stringify(origin));return target; }记得初学的时候,以为一个对象赋值另一个空对象( newObj = originObj)就可以达到拷贝的效果,结果后来操作被赋值的那个对象之后,没想到源对象也修改了(后来才知道因为它俩用的是同一个引用地址的东西,呜呜呜~)