javascript 复制代码 function deepClone(obj, hash = new WeakMap()) { if (obj === null || typeof obj !== 'object') { return obj; } if (hash.has(obj)) { return hash.get(obj); } const copy = Array.isArray(obj) ? [] : {}; hash.set(obj, copy); for (const key in obj...
functiondeepCopy(p, c) {varc = c ||{};for(variinp) {if(typeofp[i] === 'object') { c[i]= (p[i].constructor === Array) ?[] : {}; deepCopy(p[i], c[i]); }else{ c[i]=p[i]; } }returnc; } 使用时这样写: varProgrammer = deepCopy(Chinese); 现在,给父对象加一个...
1、Object.assign() 2、转成JSON 3、递归 4. 通过jQuery的extend方法实现深拷贝 5. lodash函数库实现深拷贝 一、区别 浅拷贝(shallow copy): 复制指向某个对象的指针,而不复制对象本身,新旧对象共享一块内存;浅拷贝就是只拷贝一层,更深层次对象级别只拷贝引用(地址)当拷贝的新对象发生改变时,原对象也会发生相...
下面是deepCopy()深拷贝函数,其中使用到了判断变量的类型函数 //判断变量的类型functiongetType(obj){ let str= Object.prototype.toString.call(obj);//检测基本类型值,引用类型值的类型let map ={'[object Boolean]': 'boolean','[object Number]': 'number','[object String]': 'string','[object Functi...
function deepClone(source){ if(!source || typeof source !== 'object'){ throw new Error('error arguments', 'shallowClone'); } var targetObj = source.constructor === Array ? [] : {}; for(var keys in source){ if(source.hasOwnProperty(keys)){ ...
1.Object.create(obj) Object.create() 方法可以用于创建一个新对象,并将原对象作为新对象的原型。这样,新对象就可以访问原对象的所有属性和方法。 示例代码: const obj1 = { name: '张三', age: 18 }; const obj2 = Object.create(obj1);
function arrDeepCopy(source){ var sourceCopy = []; for (var item in source) sourceCopy[item] = typeof source[item] === 'object' ? arrDeepCopy(source[item]) : source[item]; return sourceCopy; } 1. 2. 3. 4. 5. 这种方法简单粗暴,但是利用JS本身的函数我们可以更加便捷地实现这个操作...
let deepCopy = JSON.parse(JSON.stringify(obj));2. 使用Object.assign():// 定义一个对象 let obj = { name: 'John',age: 20 };// 深拷贝 let deepCopy = Object.assign({}, obj);3. 使用ES6的扩展运算符:// 定义一个对象 let obj = { name: 'John',age: 20 };// 深拷贝 let deep...
[] : {}; for (var key in obj) { if (obj.hasOwnProperty(key)) { newObj[key] = typeof obj[key] === 'object' ? deepCopy(obj[key]) : obj[key]; } } return newObj; } 六、注意事项 尽管使用深拷贝会完全的克隆一个新对象,不会产生副作用,但是深拷贝因为使用递归,性能会不如浅拷贝,...
i] = handler(arr[i], false); } else { newArr[i] = arr[i]; } } }return newArr; }, //正常对象的处理 第二个参数为是否做浅拷贝'Object': function(obj, shallow) { var newObj = {}, prop, handler;for (prop in obj) { //关于原型中属性的处理太过复杂...