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 };// 深拷...
deep: { count: 2 } }; console.log(a['count']); // []中使用字符串形式 let b =Object.a...
浅拷贝(shallow copy): 深拷贝(deep copy) 二、实现方法: 浅拷贝 1、直接赋值法 深拷贝 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。
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本身的函数我们可以更加便捷地实现这个操作...
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)){ ...
下面是deepCopy()深拷贝函数,其中使用到了判断变量的类型函数 //判断变量的类型functiongetType(obj){ let str= Object.prototype.toString.call(obj);//检测基本类型值,引用类型值的类型let map ={'[object Boolean]': 'boolean','[object Number]': 'number','[object String]': 'string','[object Functi...
function deepCopy(p, c) { var c = c || {}; for (var i in p) { if (typeof p[i] === 'object') { c[i] = (p[i].constructor === Array) ? [] : {}; deepCopy(p[i], c[i]); } else { c[i] = p[i]; } } return c;}// 调用var copyA...