首页 > 编程知识 正文

js面试题大汇总,JS深浅拷贝实现方法

时间:2023-05-03 07:17:27 阅读:134720 作者:1734

JS面试题系列(一)深度拷贝、轻拷贝、轻拷贝深度拷贝

深拷贝浅拷贝是常见的面试。

光拷贝直接赋值let a={age: 1}let b=a; console.log(b )/) age: ) a.age=2; console.log(b )//(age : )弊端:对象在代入中实际上会复制地址,改变的一方也会被其他人改变。

oject.assign(object.assign方法用于合并对象,并将源对象(source )的所有可枚举属性复制到目标对象(target )中。

Object.assign方法的第一个参数是目标对象,后面的所有参数都是源对象。

leta={ age : } letb=object.assign ({ },a ); a.age=2; 在console.log(b.age )/1中,您可以看到可以通过Object.assign )解决直接赋值问题。

展开运算符… let a={age: 1}let b={.a}; a.age=2; console.log(b.age )/1深度复制通常可以解决大多数问题,但在以下情况下需要使用深度复制:

let a={age: 1,person:{tall: 180,}}let b={.a}a.person.tall=170; console.log(b.Person.tall )的浅拷贝只解决了第一层的问题。 如果以中海油为对象,就回到最初的话题。 两者有同样的地址。 在这种情况下,需要使用深拷贝。

JSON.Parse(JSON.Stringify ) obj ) ) let a={age: 1,person :180,}}letb=JSON.parse ) JSON.SON console.log(b )弊端:

如果忽略undefined,则无法序列化symbol的函数将忽略无法解析循环引用的对象的循环引用,并且在遇到函数、undefined或symbol时无法实现深度复制。此对象也无法正常序列化消息通道//undefined循环引用let obj={ a: 1,b: { c: 2,d: 3,}, f : undefined } obj.c=obj.b obj.e=obj.aobj.b.c=obj.cobj.b.d=obj.b.e=obj.b.cfunctiotion port1.postmessage(obj; ); }请记住}deepcopy(obj ).then ) ) copy )={//messagechannel是异步的前提! let copyObj=copy; console.log(copyobj,obj ) console.log (copy obj==obj ) }; 但是,如果复制有函数的对象,仍然会出现错误。 此时,请考虑使用lodash的深度复制函数

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。