@色少8年前
05/11
13:35
http://www.cnblogs.com/charling/p/3452677.html
jQuery.extend()源码解读深拷贝或者浅拷贝
http://jerryzou.com/posts/dive-into-deep-clone-in-javascript/
深入剖析JavaScript 的深复制
记录如下:
1、jQuery.clone()——dom对象的复制
在 jQuery 中也有这么一个叫
1 | $.clone() |
的方法,可是它并不是用于一般的 JS 对象的深复制,而是用于 DOM 对象。
2、jQuery.extend()——深复制(递归extend)
3、lodash —— _.clone() / _.cloneDeep()
1 | _.clone(obj, true) |
等价于
1 | _.cloneDeep(obj) |
比较各个深复制方法
特性 | jQuery | lodash | JSON.parse | 所谓“拥抱未来的深复制实现” |
---|---|---|---|---|
浏览器兼容性 | IE6+ (1.x) & IE9+ (2.x) | IE6+ (Compatibility) & IE9+ (Modern) | IE8+ | IE9+ |
能够深复制存在环的对象 | 抛出异常 RangeError: Maximum call stack size exceeded | 支持 | 抛出异常 TypeError: Converting circular structure to JSON | 支持 |
对 Date, RegExp 的深复制支持 | × | 支持 | × | 支持 |
对 ES6 新引入的标准对象的深复制支持 | × | 支持 | × | × |
复制数组的属性 | × | 仅支持RegExp#exec返回的数组结果 | × | 支持 |
是否保留非源生对象的类型 | × | × | × | 支持 |
复制不可枚举元素 | × | × | × | × |
复制函数 | × | × | × | × |