javascript 深度克隆对象
js一般有两种不同数据类型的值:
基本类型(包括undefined,Null,boolean,String,Number),按值传递;
引用类型(包括数组,对象),按址传递,引用类型在值传递的时候是内存中的地址。例如:
如果你修改b的值,那么a变量的值也发生了变化。
克隆或者拷贝分为2种:浅度克隆(拷贝),深度克隆(拷贝);
浅度克隆:基本类型为值传递,对象仍为引用传递。
深度克隆:所有元素或属性均完全克隆,并于原引用类型完全独立,即,在后面修改对象的属性的时候,原对象不会被修改。
我的代码如下: 主要用了递归。
function cloneObject(obj){
if(obj === null){
return null;
}else if(obj instanceof Array){
var arr = [];
for(var i = 0, ilen = obj.length; i < ilen; i+=1){
arr[i] = obj[i];
}
return arr;
}else if(obj instanceof Date || obj instanceof RegExp || obj instanceof Function){
return obj;
}else if(obj instanceof Object){
var o = {};
for(var i in obj){
if(obj.hasOwnProperty(i)){
o[i] = cloneObject(obj[i]);
}
}
return o;
}else{
return obj;
}
}
转载于:https://www.cnblogs.com/yu-709213564/p/6652178.html
javascript 深度克隆对象相关推荐
- [js] 请写一个性能最好的深度克隆对象的方法
[js] 请写一个性能最好的深度克隆对象的方法 const deepClone = (obj) => {const copy = obj instance Array ? [] : {};for ...
- 深度克隆对象【前端每日一题-19】
深度克隆对象的方法有哪些?并把你认为最好的写出来. 此题不多说,必须掌握,工作中经常需要用到. JSON.stringify 很明显可以看到输出的对象中没有say方法和undefined属性,所以JS ...
- 实现 Cloneable接口深度克隆对象
实现 Cloneable接口深度克隆对象 Body对象中有Head对象,Head对象中有Face对象,Face对象中有int变量和String变量. 实现Boby对象的深度克隆,看下面代码: pack ...
- Java深度克隆对象
关于对象的克隆,Java自带了一个clone()方法. 但是众所周知,这个clone()方法只是做浅层的对象复制,仅适用于对象属性是简单数据类型(int/long/float等)的场景.对于对象属性是 ...
- 在JavaScript中深度克隆对象的最有效方法是什么?
克隆JavaScript对象的最有效方法是什么? 我见过obj = eval(uneval(o)); 正在使用,但这是非标准的,仅受Firefox支持 . 我已经完成了obj = JSON.parse ...
- Javascript 深度克隆中的循环引用问题解决和代码优化
概要 在前端项目开发中,我们经常需要深度克隆JS对象.在克隆代码开发过程中,我们经常会遇到数组判定或对象循环引用的问题. 本文通过实例来解决上述问题 代码及实现 常见深度克隆JS对象的代码 funct ...
- 覆盖所有类型的javascript深度克隆
第一种方法(只适用于基础类型) const newObj = JSON.parse(JSON.stringify(oldObj)); 第二种方法 const getType = (obj)=> ...
- javascript 深度克隆
关键词 :递归 主要分为 数组 .对象.以及基本类型 function clone(Obj) { var buf; if (Obj instanceof A ...
- Java 快速深度克隆对象 [Faster Deep Copies of Java Objects]
最近深刻纠结于复杂对象的clone, 实在苦恼于写多个对象的clone函数,于是收集网上的deep clone方法,真是适合我这种懒人~~ The java.lang.Object root supe ...
最新文章
- kubernetes资源对象之security context
- oracle 丁勇 从零开始学_8.3.1 多表查询分类
- BootLoader引导程序制作及移植(一)
- 你的灯亮着吗?阅读笔记之一
- 第二节:深入剖析Thread的五大方法、数据槽、内存栅栏
- 英语口语 week13 Monday
- 信息学奥赛一本通(1047:判断能否被3,5,7整除)
- 2022年有哪些值得学习的Java开源项目?这7个火爆了
- C语言 int y=10 do,删除学生信息算法执行完case10输入y 之后do whil
- MTCNN-tensorflow源码解析之训练PNet网络-train_PNet.py
- iOS学习——Socket
- 如何成功发布一个MSMQ的Windows服务
- centos7修复libcrypto.so.10缺失的问题,导致ssh无法运行
- sql家庭成员、收入支出数据库
- 国开大学计算机实操,国开大学计算机实操答案一.doc
- 重点分析!转型中的好莱坞发生了哪些变局?
- 赛博念经!自带RGB的电子木鱼,能敲出《般若心经》,网友:想买
- sqlserver把某个字段多行逗号隔开
- RAAT: Relation-Augmented Attention Transformer for Relation Modeling in Document-Level 论文解读
- 影视观影神器:ZY Player for Mac
热门文章
- 14.关于原子性的相关介绍
- Decision stump、Bootstraping、bagging、boosting、Random Forest、Gradient Boosting
- 语义分割--Full-Resolution Residual Networks for Semantic Segmentation in Street Scenes
- vscode 使用ssh密钥登录远程Linux -- vscode remote linux ssh key
- 146. LRU Cache--java,python解法
- 查询距离两天的数据_一张图就可以管理城建数据?!实景城市三维平台来了
- Spring data redis乱码问题
- mac玩rust用什么画质_玩七日杀Steam游戏用什么加速器?电狐加速器
- 实测实量数据表格_施工现场全套实测实量操作图解,值得收藏!
- 计算机二级公共基础知识总结百度云,计算机二级公共基础知识总结详细版本[精]...