js 深拷贝与浅拷贝

140 阅读1分钟

javascript中拷贝对象一般分为深拷贝及浅拷贝。 两者区别在于:Js中分为基本类型和引用类型,object为引用类型。复制对象时,在js内存中存储的是一个指针,通过这个指针路径在内存中找到对应的值。浅拷贝创建的对象指针,指针路径指向内存中同一个存储对象,即一旦改变对象值,会改变原有对象。深拷贝与之相反,是创建的对象指针在内存中指向不同的存储对象,发生改变两者都互不影响。

深拷贝方法

1. 通过json反序列实现
JSON.parse(JSON.stringify(object));

缺点:对象中存在array, function,regex会拷贝失败

2. 利用 Lodash库方法深拷贝
3. 通过遍历对象属性,并判断属性类型进行不同处理,实现完整拷贝
4. Jquery方法
$.extend(true, {}, object).  // true 深拷贝,默认为false, 浅拷贝