深拷贝和浅拷贝

javaScript中的深拷贝和浅拷贝
Lodash.js常用拷贝
面试中的深拷贝和浅拷贝

深拷贝浅拷贝主要是针对对象的属性是对象(引用类型

基本类型:就是值类型,即在变量所对应的内存区域存储的是值(直接存储在栈(stack)中的数据)

引用类型:就是地址类型(存储的是该对象在栈中引用,真实的数据存放在堆内存里)

深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型的

浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。

深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象

 

lodash.js降低 array、number、objects、string 等等的使用难度从而让 JavaScript 变得更简单。非常适用于:遍历 array、object 和 string;对值进行操作和检测;创建符合功能的函数

常用拷贝:

_.clone(value):浅拷贝。浅拷贝只是对指针的拷贝,拷贝后两个指针指向同一个内存空间。

_.cloneDeep(value):深拷贝。深拷贝不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针是指向两个不同地址的指针。

_.defaults(object, [sources]):只对比第一层。给对象添加字段,保持原来字段的值。

_.defaults({‘a’:1},{‘b’:1},{‘a’:3})   ========>{‘a’:1,’b’:2}

_.defaultsDeep(object, [sources]):递归对比到最里层。给对象添加字段,保持原来字段的值。

_.defaultsDeep({‘a’:{‘b’:1}},{‘a’:{‘b’:1,’c’:3}})   ========>{‘a’:{‘b’:1,’c’:3}}

原生Object.assign无法实现深拷贝

Object.assign:合并多个JavaScript对象(第一个参数是目标对象,后面的都是源对象,assign方法将多个原对象的属性和方法都合并到了目标对象上面,如果在这个过程中出现同名的属性(方法),后合并的属性(方法)会覆盖之前的同名属性(方法)。)

 

本文来自投稿,不代表PmTemple立场,如若转载,请注明出处:https://www.pmtemple.com/flyingfish/13346/

。如有涉及侵权行为,请发送相关证明材料至邮箱admin@pmtemple.com

发表评论

登录后才能评论
分享本页
返回顶部