javascript深拷贝的情况有哪些(javascript,开发技术)

时间:2024-04-29 08:21:31 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

深拷贝:引用数据类型中名存在栈内存中,值存在于堆内存中,但是栈内存会提供一个引用的地址指向堆内存中的值,深拷贝就是增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存。方法一:使用Object.assign(),一般用于数据类型比较简单,层数不大于1的数据;因为Object.assign无法深层拷贝。

conststrJson={id:'12343231',name:'张三',age:23,inof:{sex:'男'},sjid:null,strHandle(){console.log('111111111');}}obj.name='lisi'obj.inof.sex='女'console.log('obj',obj);console.log('strJson',strJson);

结果:

javascript深拷贝的情况有哪些

方法二:使用JSON.parse和JSON.stringify,一般用于数据类型比较复杂的,有深层嵌套的数据;但是undefined , function, RegExp 等类型无法处理;

conststrJson={id:'12343231',name:'张三',age:23,inof:{sex:'男'},sjid:null,strHandle(){console.log('111111111');}}constobj=JSON.parse(JSON.stringify(strJson))obj.name='lisi'obj.inof.sex='女'console.log('obj',obj);console.log('strJson',strJson);

结果:

javascript深拷贝的情况有哪些

第三种:使用递归拷贝,在代码中处理特殊的情况。

functioncopyHandle(strJson){letresult;//判断是否存在if(!strJson)returnnull;//判断是否是对象if(typeofstrJson!=='object')returnstrJson;//判断是否是数组if(Array.isArray(strJson)){result=[];for(letiofstrJson){result.push(copyHandle(i))}}//判断是否是RegExpelseif(strJson.constructor===RegExp){result=strJson}//判断是否是对象else{result={}for(letiinstrJson){result[i]=copyHandle(strJson[i])}}//返回结果returnresult}
 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:javascript深拷贝的情况有哪些的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:基于Jenkins+Maven+Gitea+Nexus怎么搭建CICD环境下一篇:

4 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18