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...
基本类型(如 number、string、boolean):按值存储和传递 引用类型(如 object、array、function):按引用存储和传递 当你将一个对象赋值给另一个变量时,实际上只是复制了指向该对象的引用,而不是对象本身的内容: 复制 constoriginal={name:"John"};constcopy=original;copy.name="Jane";console.log(original.name);...
// 深拷贝 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 };// 深拷...
1、Object.assign() 2、转成JSON 3、递归 4. 通过jQuery的extend方法实现深拷贝 5. lodash函数库实现深拷贝 一、区别 浅拷贝(shallow copy): 复制指向某个对象的指针,而不复制对象本身,新旧对象共享一块内存;浅拷贝就是只拷贝一层,更深层次对象级别只拷贝引用(地址)当拷贝的新对象发生改变时,原对象也会发生相...
var cloneObj = deepClone(obj); cloneObj.a.a = "changed"; console.log(obj.a.a); // "world" 这种方法简单易用。 但是这种方法也有不少坏处,譬如它会抛弃对象的constructor。也就是深拷贝之后,不管这个对象原来的构造函数是什么,在深拷贝之后都会变成Object。
下面是deepCopy()深拷贝函数,其中使用到了判断变量的类型函数 //判断变量的类型functiongetType(obj){ let str= Object.prototype.toString.call(obj);//检测基本类型值,引用类型值的类型let map ={'[object Boolean]': 'boolean','[object Number]': 'number','[object String]': 'string','[object Functi...
b: {c: 2}}; let clone = Object.assign({}, obj);4. 使用递归函数:functiondeepClone(obj){...
function deepCopy( obj, obj2 ){ var obj2 = obj2 || {}; for( var item in obj ){ // 避免相互引用对象导致死循环,如initalObj.a = initalObj的情况 if(obj[item] === obj2) { continue; } if( typeof obj[item] == 'object'){ ...
result = []; } else { return obj; } for (var key in obj) { var copy = obj[key]; if (judgeType(copy) === "Object" || "Array") { //result[key]=deepCloneNick(copy);//递归调用 避免函数名改变 改成下面一句 result[key] = arguments.callee(copy); //返回正...
深拷贝(deep copy) 深拷贝也就是拷贝出一个新的实例,新的实例和之前的实例互不影响,深拷贝的实现有几种方法,首先我们可以借助jQuery,lodash等第三方库完成一个深拷贝实例。在jQuery中可以通过添加一个参数来实现递归extend,调用$.extend(true, {}, ...)就可以实现一个深拷贝。