1、Object.assign() 2、转成JSON 3、递归 4. 通过jQuery的extend方法实现深拷贝 5. lodash函数库实现深拷贝 一、区别 浅拷贝(shallow copy): 复制指向某个对象的指针,而不复制对象本身,新旧对象共享一块内存;浅拷贝就是只拷贝一层,更深层次对象级别只拷贝引用(地址)当拷贝的新对象发生改变时,原对象也会发生相...
1.下面的方法,是给Object的原型(prototype)添加深度复制方法(deep clone)。 1Object.prototype.clone =function() {2//Handle null or undefined or function3if(null==this|| "object" !=typeofthis)4returnthis;5//Handle the 3 simple types, Number and String and Boolean6if(thisinstanceofNumber ||th...
下面是deepCopy()深拷贝函数,其中使用到了判断变量的类型函数 //判断变量的类型functiongetType(obj){ let str= Object.prototype.toString.call(obj);//检测基本类型值,引用类型值的类型let map ={'[object Boolean]': 'boolean','[object Number]': 'number','[object String]': 'string','[object Functi...
由上述结果可知:直接使用Object.create()方法,进行的也是一级深拷贝,原型对象里的耳机属性值会被改变。 因此作如下的修改: function deepCopy(initalObj, finalObj) { var obj = finalObj || {}; for (var i in initalObj) { var prop = initalObj[i]; // 避免相互引用对象导致死循环,如initalObj.a ...
浅拷贝可以通过创建一个新的空对象,for...in遍历现有对象的属性添加给新对象;代码更简洁的方式是Object.assign()方法。也可以使用第三方库,如【Underscore】_.clone()等。 我们先看看第一种方式封装的写法。 function shallowCopy( obj ) { let copy = Array.isArray(obj) ? [] : {}; ...
deepCopy(source[key], target[key]); } else { // 如果不是object类型,就直接赋值拷贝 target[key] = source[key]; } } } return target; } 以上的无论深、浅拷贝,都用了source.hasOwnProperty(key),意思是判断这一项是否是其自有属性,是的话才拷贝,不是就不拷贝。
function shallowCopy(source){ if(!source||typeof source!=='object'){ throw new Error('error'); } var targetObj=source.constructor===Array?[]:{}; for(var keys in source){ if(source.hasOwnProperty(keys)){ targetObj[keys]=source[keys] ...
const copy = deepCopy(obj); console.log(copy); // { a: { b: 1 } } 深浅拷贝是 JavaScript 中常用的操作,用于复制对象和数组。浅拷贝只复制对象的一层,而深拷贝会复制整个对象的所有层次。浅拷贝的实现方式有 Object.assign()、Spread operator、Array.slice() 和 Array.concat(),而深拷贝的实现方式...
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...
if((p instanceof Object) || typeof p === 'function'){ //基本数据类型和函数 newObj[p] = obj[p]; }else{ //继续复制对象里面的对象 newObj[p] = deepCopy(obj[p]); } } return newObj; } let p = { name: 'bob', friends: ['jack', 'rose'] ...