javascript中的深拷贝和浅拷贝?
来源:互联网 发布:网络平台借贷违法的吗 编辑:程序博客网 时间:2024/06/05 23:44
作者:邹润阳
链接:https://www.zhihu.com/question/23031215/answer/46220227
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
链接:https://www.zhihu.com/question/23031215/answer/46220227
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
感觉大家好像都没有正面回答题主的问题呢。题主问的是深复制和浅复制的区别,大家答的却都是如何实现深复制。我来答一发~
先抛开jQuery,上几句简单的代码:
因为JavaScript存储对象都是存地址的,所以浅复制会导致 obj 和 obj1 指向同一块内存地址,大概的示意图如下。而深复制一般都是开辟一块新的内存地址,将原对象的各个属性逐个复制出去。如下图所示:
<img src="https://pic1.zhimg.com/6604224933c95787764d941432a1f968_b.jpg" data-rawwidth="3264" data-rawheight="1224" class="origin_image zh-lightbox-thumb" width="3264" data-original="https://pic1.zhimg.com/6604224933c95787764d941432a1f968_r.jpg">
因此,如果你使用浅复制,你会发现:
先抛开jQuery,上几句简单的代码:
var obj = { a:1, arr: [1,2] };var obj1 = obj; //浅复制var obj2 = deepCopy(obj); //深复制
因为JavaScript存储对象都是存地址的,所以浅复制会导致 obj 和 obj1 指向同一块内存地址,大概的示意图如下。而深复制一般都是开辟一块新的内存地址,将原对象的各个属性逐个复制出去。如下图所示:
<img src="https://pic1.zhimg.com/6604224933c95787764d941432a1f968_b.jpg" data-rawwidth="3264" data-rawheight="1224" class="origin_image zh-lightbox-thumb" width="3264" data-original="https://pic1.zhimg.com/6604224933c95787764d941432a1f968_r.jpg">
因此,如果你使用浅复制,你会发现:
obj.a = 2;console.log(obj1.a); //输出2
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; }
0 0
- javascript中的深拷贝和浅拷贝
- javascript中的浅拷贝和深拷贝
- javascript中的深拷贝和浅拷贝?
- javaScript中的浅拷贝和深拷贝
- JavaScript中的深拷贝和浅拷贝
- javascript中的深拷贝和浅拷贝?
- javascript中的深拷贝和浅拷贝
- javascript中的深拷贝和浅拷贝
- javascript 中的深拷贝和浅拷贝的区别
- javascript中的浅拷贝和深拷贝例子
- 浅析javaScript中的浅拷贝和深拷贝
- Javascript中的深拷贝与浅拷贝
- JavaScript中的深拷贝与浅拷贝
- JavaScript中的浅拷贝与深拷贝
- javascript 深拷贝和浅拷贝
- JavaScript深拷贝和浅拷贝
- JavaScript深拷贝和浅拷贝
- JavaScript的深拷贝和浅拷贝
- ③Cookie窃取攻击
- rsa加密算法
- [LeetCode]Majority Element
- C#语言和数据库技术基础 MyBank
- LeetCode No.258 Add Digits
- javascript中的深拷贝和浅拷贝?
- [noip2013tg] 火柴排队
- java集合15--set架构
- predis如何实现phpredis的pconnect方法
- 第11周 oj (FINAL)趣味取小数
- 素数判定、埃氏筛法与整数分解
- 洛谷 P2853 [USACO06DEC]牛的野餐Cow Picnic
- 缺项级数的收敛域求解
- 网络5层,对应每层的协议