当前位置:   article > 正文

关于object.assign 深拷贝和浅拷贝的笔记_object.assign 内存地址

object.assign 内存地址

最近写代码经常会用到 object.assign进行拷贝操作 这次记录下来 希望加深影响并加深理解

  1. let test = () => {
  2. let srcArr = { name: '李四', age: '16' }
  3. const copyArr = {};
  4. Object.assign(copyArr, srcArr);
  5. console.log(copyArr);//输出结果{name: '李四', age: '16'}
  6. }

从代码和输出结果可以看到 object.assign主要进行对象的拷贝合并操作 我们来实习啊如果目标对象有相同属性的值会有什么效果

  1. let srcArr = { name: '李四', age: '16' }
  2. const copyArr = {name:'王五',sex:'男'};
  3. Object.assign(copyArr, srcArr);
  4. console.log(copyArr);//输出结果{name: '李四', sex: '男', age: '16'}

可以看到相对属性的值会做覆盖操作。拷贝我们都知道有深拷贝和浅拷贝那 通过object.assign是哪种拷贝呢 先解释一下什么是深拷贝和浅拷贝

  • 对象的浅拷贝:浅拷贝是对象共用的一个内存地址,对象的变化相互影响。
  • 对象的深拷贝:简单理解深拷贝是将对象放到新的内存中,两个对象的改变不会相互影响。
  1. let test = () => {
  2. let srcArr = { name: '李四', age: '16' }
  3. const copyArr = {name:'王五',sex:'男'};
  4. Object.assign(copyArr, srcArr);
  5. srcArr.name='张三';
  6. console.log(copyArr);//输出结果{name: '李四', sex: '男', age: '16'}
  7. }

可以看到拷贝后修改原数据并没有影响拷贝后的对象,那应该是浅拷贝了 但是我们再做个代码尝试 

  1. let test = () => {
  2. let srcArr = { name: '李四', age: '16',project:{name:'语文'} }
  3. const copyArr = {name:'王五',sex:'男'};
  4. Object.assign(copyArr, srcArr);
  5. srcArr.name='张三';
  6. srcArr.project.name='数学'
  7. console.log(copyArr);
  8. }

输出结果如下:

可以看到 虽然修改了name没有受到影响,但是修改project的name却影响了新的对象,也就是说,对于Object.assign()而言,如果对象的属性值为简单类型(string,number),那么是深拷贝;如果属性是对象或者引用类型,那么就是浅拷贝

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/68147
推荐阅读
相关标签
  

闽ICP备14008679号