当前位置: 首页 > Web前端 > JavaScript

JavaScript实现浅拷贝的方法

时间:2023-03-26 22:11:04 JavaScript

当然,浅拷贝只能针对嵌套对象实现,单层对象实现深拷贝方式——Object.assign()lettarget={};letsource={a:'123',b:{name:'张'}}Object.assign(target,source)console.log(target);//{a:'123',b:{name:'zhang'}}//修改嵌套对象b中的属性target。b.name='lisi';console.log(source);//{a:'123',b:{name:'lisi'}}方法二Array.prototype.slice()letarray=[{a:1},{b:2}]//slice()方法选择从给定开始参数开始到给定结束参数结束的元素,但不包括letnewArr=array.slice(0,2)console.log(newArr);//[{a:1},{b:2}]newArr[1].b='222222'console.log(array);//[{a:1},{b:'222222'}]方法三Array.prototype.concat()letarrThird=[{c:1},{d:2}];//concat()方法是用于连接两个或多个数组,但返回一个包含连接数组值的新数组letnewThird=[].concat(arrThird);console.log(newThird);//[{c:1},{d:2}]//修改新数组newThird[0].c中newThird的c属性='BalaLaEnergy'console.log(arrThird);//[{c:'BalaLaLaEnergy'},{d:2}]方法四扩展算子...letobj1={j:1,k:{i:2}}//解构letnewObj={...obj1}console.log(newObj);//{j:1,k:{i:2}}newObj。j='奥特曼'console.log(obj1);//{j:1,k:{i:2}}newObj.k.i='小怪兽'console.log(obj1);//{j:1,k:{i:'LittleMonster'}}//可以看出是针对嵌套对象实现了浅拷贝方法5直接使用=赋值leta=[2,32,13,4]让b=a;//赋值操作console.log(b);//[2,32,13,4]//修改b数组b[1]='helljavaScript'console.log(a);//[2,'helljavaScript',13,4]方法六for..in..letobj={a:{name:'Xiaolan',age:18}}letcopy=(obj)=>{letnewObj={}for(varkeyinobj){newObj[key]=obj[key]}returnnewObj}letobjSix=copy(obj)console.log(objSix);//{a:{name:'小兰',age:18}}//修改objSix的属性objSix.a.name='Yueyuezi'console.log(obj);//{a:{name:'月月月子',age:18}}方法七$.extend()文档