前端学习

前端学习

@色少8年前

05/11
13:35
前端技能

深入剖析 JavaScript 的深复制

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返回的数组结果 × 支持
是否保留非源生对象的类型 × × × 支持
复制不可枚举元素 × × × ×
复制函数 × × × ×

深入剖析 JavaScript 的深复制