map函数本身并不执行深拷贝,而是执行浅拷贝。对于基本数据类型(如数字、字符串、布尔值等),map会复制其值;但对于引用类型,map只会复制其引用,而不是对象的深层次内容。 示例展示map函数的拷贝行为: javascript // 示例对象 const obj = { a: 1, b: 2 }; // 原数组 const arr = [obj, obj]; // ...
浅拷贝就是只拷贝基础数据类型的数据,并且数据只有单一的一层,而深拷贝用于拷贝具有复杂的数据类型的数据 应用场景: 浅拷贝主要用于你需要拷贝的对象的数据结构只有基础数据类型。 深拷贝主要用于你想操作该数据,但是又不想影响到原数据的时候,就可以进行深拷贝。
console.log(arr2); //[1, 2, 3, 4] 简单来说,深拷贝主要是将另一个对象的属性值拷贝过来之后,另一个对象的属性值并不受到影响,因为此时它自己在堆中开辟了自己的内存区域,不受外界干扰。 浅拷贝主要拷贝的是对象的引用值,当改变对象的值,另一个对象的值也会发生变化。 那具体使用情况该使用浅拷贝还是...
设想一下,如果我们要拷贝的对象非常庞大时,使用Map会对内存造成非常大的额外消耗,而且我们需要手动清除Map的属性才能释放这块内存,而WeakMap会帮我们巧妙化解这个问题。 其他数据类型 在上面的代码中,我们其实只考虑了普通的object和array两种数据类型,实际上所有的引用类型远远不止这两个,还有很多,下面我们先尝试获取对...
浅拷贝:浅拷贝的拷贝的是原对象的引用,这就意味着如果原对象的该属性值改变了,那么新的拷贝对象的属性值也会发生改变。 constobj={foo:{bar:{name:"name1"}}}// 浅拷贝constshallowObj=shallowClone(obj);console.log(obj.foo===shallowObj.foo);// true// 深拷贝constdeepObj=deepClone(obj);console.lo...
使用递归,来动手写一个深拷贝。 function clone(target,map = new WeakMap){ if(typeof target !=='object')return target //let cloneTarget = {} let cloneTarget = Array.isArray(target)?[]:{} if (map.get(target)){ return map.get(target) }else{ map.set(target,cloneTarget) } for(const...
深拷贝 1、Object.assign() 当对象中只有一级属性,没有二级属性的时候,此方法为深拷贝,但是对象中有对象的时候,此方法,在二级属性以后就是浅拷贝。 let foo = { a: 1, b: 2, c: { d: 1, } } let bar = {}; Object.assign(bar, foo); ...
js深拷贝常用的方法 在JavaScript中,实现深拷贝(deep copy)有多种方法。以下是一些常用的方法: 1. 使用JSON方法(局限性大): 代码语言:javascript 复制 functiondeepClone(obj){returnJSON.parse(JSON.stringify(obj));} 这个方法简单易用,但对于循环引用、特殊对象(如Date、RegExp、Set、Map等)以及函数等类型无法...