浅谈深拷贝和浅拷贝

浅拷贝只拷贝一层属性对于引用类型无法拷贝
在项目中有许多地方需要数据克隆,特别是引用类型对象,我们无法使用普通的赋值方式克隆,虽然我们一般使用第三方库如lodash来实现深拷贝,但是我们也需要知道一些其中的原理
浅拷贝
Object.assign({},obj)浅拷贝object
obj1={…obj2}通过spread展开运算符浅拷贝obj2
Object.fromEntries(Object.entries(obj))通过生成迭代器再通过迭代器生成对象
Object.create({},Object.getOwnPropertyDescriptors(obj))浅拷贝obj
Object.defineProperties({},Object.getOwnPropertyDescriptors(obj))浅拷贝obj

引用类型数据:
  也就是对象类型Object type,比如:Object 、Array 、Function 、Data等。
  javascript的引用数据类型是保存在堆内存中的对象。
  与其他语言的不同是,你不可以直接访问堆内存空间中的位置和操作堆内存空间。只能操作对象在栈内存中的引用地址。
  所以,引用类型数据在栈内存中保存的实际上是对象在堆内存中的引用地址。通过这个引用地址可以快速查找到保存中堆内存中的对象。
  var obj1 = new Object();
  var obj2 = obj1;
  obj2.name = “我有名字了”;
  console.log(obj1.name); // 我有名字了
  说明这两个引用数据类型指向了同一个堆内存对象。obj1赋值给onj2,实际上这个堆内存对象在栈内存的引用地址复制了一份给了obj2,
  但是实际上他们共同指向了同一个堆内存对象。实际上改变的是堆内存对象。

你可能感兴趣的:(JS处理方法,typescript,javascript,前端)