美文网首页
什么是浅拷贝

什么是浅拷贝

作者: 小李不小 | 来源:发表于2020-09-16 14:46 被阅读0次

什么是浅拷贝?可以这么理解:创建一个新的对象,把原有的对象属性值,完整地拷贝过来。其中包括了原始类型的值,还有引用类型的内存地址。

让我们用 Object.assign 来改写一下上面的例子:
2 const obj2 = Object.assign({}, obj);
3 obj2.a = 3;
4 console.log(obj.a); // 1

Ok,改变了 obj2 的 a 属性,但 obj 的 a 并没有发生变化,这正是我们想要的。

可是,这样的拷贝还有瑕疵,再改一下例子:

1 const arr = [{a:1,b:2}, {a:3,b:4}];
2 const newArr = [].concat(arr);
 
4 newArr.length = 1; // 为了方便区分,只保留新数组的第一个元素
5 console.log(newArr); // [{a:1,b:2}]
6 console.log(arr); // [{a:1,b:2},{a:3,b:4}]
 
8 newArr[0].a = 123; // 修改 newArr 中第一个元素的a
9 console.log(arr[0]); // {a: 123, b: 2},竟然把 arr 的第一个元素的 a 也改了

oh,no!这不是我们想要的...

经过一番查找,才发现:原来,对象的 Object.assign(),数组的 Array.prototype.slice() 和 Array.prototype.concat(),还有 ES6 的 扩展运算符,都有类似的问题,它们都属于 浅拷贝。这一点,在实际工作中处理数据的组装时,要格外注意。

所以,浅拷贝应该这样定义:只拷贝第一层的原始类型值,和第一层的引用类型地址。

相关文章

  • iOS--拷贝相关题

    1、什么是深拷贝什么是浅拷贝?浅拷贝和深拷贝的区别 * 浅拷贝(shallow copy):指针拷贝,对于被拷贝对...

  • Object 对象

    什么是浅拷贝,如何实现浅拷贝?什么是深拷贝,如何实现深拷贝? 是什么: 浅拷贝: 将原对象或原数组的引用直接赋给新...

  • js浅拷贝、深拷贝

    前言 本文主要简单讲一下什么是浅拷贝、什么是深拷贝、深拷贝与浅拷贝的区别,以及怎么进行深拷贝和怎么进行浅拷贝。 一...

  • JavaScript深拷贝实现

    什么是浅拷贝,什么是深拷贝? 什么是浅拷贝关于浅拷贝的概念,我在网上看到一种说法,直接上代码。 但是我个人认为,上...

  • 重拾iOS-copy

    关键词: , , , , 面试题:1)什么是深拷贝什么是浅拷贝?2)对可变对象进行copy是深拷贝还是浅拷贝?3)...

  • 深拷贝、浅拷贝的理解与使用场景

    什么是深拷贝、浅拷贝? 通俗解释:深拷贝是内容拷贝,浅拷贝是地址拷贝 区别点: 深拷贝会创建一个新的内存空间,拷贝...

  • 2019-08-12 vue 深拷贝 浅拷贝 只能输入3的

    只能输入3的倍数 什么是深拷贝?浅拷贝 ? 1.浅拷贝:浅拷贝是拷贝引用,拷贝后的引用都是指向同一个对象的实例,彼...

  • Java深拷贝和浅拷贝

    目录介绍 01.对象拷贝有哪些 02.理解浅拷贝2.1 什么是浅拷贝2.2 实现浅拷贝案例 03.理解深拷贝3.1...

  • python切片是引用还是复制

    切片是深拷贝 等号是引用,不是拷贝 深拷贝、浅拷贝都属于拷贝,改变原始列表拷贝列表通常不变,为什么说深、浅呢?是指...

  • iOS 浅拷贝与深拷贝解析

    1、什么是浅拷贝,什么是深拷贝 浅拷贝表示的是不拷贝内容,只拷贝对应的指针,即拷贝之后的值指向内存中的地址是一样的...

网友评论

      本文标题:什么是浅拷贝

      本文链接:https://www.haomeiwen.com/subject/wancyktx.html