// 原数组let list=[1,2,3,4];//数组深拷贝let box = list.slice();//方案一let box = [].concat(list); //方案二let box = [...list];//方案三let box = Array.from(list);//方案四//对象深拷贝(问题:若属性未对象或引用,则只会拷贝对象的引用地址)let B = Object.assign({},A);//对象深拷贝,方案1//若对象中存在function或RegExp则不能使用该方法let B = JSON.parse(JSON.stringify(A));//对象深拷贝,方案2-使用递归var clone = function (obj) {if(obj === null) return nullif(typeof obj !== 'object') return obj;if(obj.constructor===Date) return new Date(obj);if(obj.constructor === RegExp) return new RegExp(obj);var newObj = new obj.constructor (); //保持继承链for (var key in obj) {if (obj.hasOwnProperty(key)) { //不遍历其原型链上的属性var val = obj[key];newObj[key] = typeof val === 'object' ? arguments.callee(val) : val; // 使用arguments.callee解除与函数名的耦合}}return newObj;};
参考
JavaScript深拷贝和浅拷贝看这篇就够了 Shallow Vs Deep Copy In Javascript Understanding Deep and Shallow Copy in Javascript
