美文网首页
浅拷贝的认识

浅拷贝的认识

作者: 嗳湫 | 来源:发表于2021-03-11 08:55 被阅读0次

第一种定义:一个新的对象直接拷贝已存在的对象的引用,即浅拷贝。

第二种定义:一个新的对象直接拷贝已存在的对象的对象属性的引用,即浅拷贝。

第一种和第二种的差异即是,对象本身引入与对象的对象属性的引入,因为我没有找到标准的关于浅拷贝的官方定义,所以对于这两种方式便开始思考想办法去验证。

Array.prototype.slice()属于浅拷贝,那我们来验证一下Array.prototype.slice()返回的新数组对象和老的数组对象之间究竟符合那种关系

var a = [ 1, 3, 5, { x: 1 } ];  
var b = Array.prototype.slice.call(a);  
b[0] = 2;   
console.log(a); // [ 1, 3, 5, { x: 1 } ];   
console.log(b); // [ 2, 3, 5, { x: 1 } ];

很明显,属于浅拷贝的a和b并不是第一种定义所描述的,如果a和b是相同的引用对象,当b[0]改变时a[0]应当是跟着改变。

var a = [ 1, 3, 5, { x: 1 } ];  
var b = Array.prototype.slice.call(a);  
b[3].x = 2; 
console.log(a); // [ 1, 3, 5, { x: 2 } ];   
console.log(b); // [ 1, 3, 5, { x: 2 } ];

通过上面的代码既可以看出,浅拷贝的正确定义是第二种,只拷贝已存在对象的对象属性的引用,其余非对象属性是占用新的内存空间,并非与原对象共享。

浅拷贝:新的对象复制已有对象中非对象属性的值和对象属性的引用。
像常用的数组方法slice和对象方法Object.assign都属于浅拷贝。


image.png

相关文章

  • JavaScript的深拷贝和浅拷贝

    原文 博客原文 大纲 前言1、对深拷贝和浅拷贝的初步认识2、深拷贝和浅拷贝的区别3、浅拷贝存在的缺陷4、深拷贝的实...

  • 深拷贝 浅拷贝

    深入认识深拷贝 浅拷贝 公共方法 // 深拷贝 浅拷贝 对于基本类型来说 对于赋值操作 就是 深拷贝 因为值...

  • 浅拷贝的认识

    第一种定义:一个新的对象直接拷贝已存在的对象的引用,即浅拷贝。 第二种定义:一个新的对象直接拷贝已存在的对象的对象...

  • iOS 深、浅拷贝的那些奇葩的事(四)

    引言  在前面两篇,讲到了深(单层深拷贝、完整深拷贝)、浅拷贝的概念、应用、验证,来认识深拷贝、浅拷贝,这篇就具体...

  • iOS深拷贝(MutableCopy)与浅拷贝(Copy)的区别

    深拷贝和浅拷贝的概念 iOS中有深拷贝和浅拷贝的概念,那么何为深拷贝何为浅拷贝呢?浅拷贝:浅拷贝并不拷贝对象本身,...

  • iOS--拷贝相关题

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

  • iOS 中 load 和 initialize 方法调用机制

    深拷贝和浅拷贝 深拷贝同浅拷贝的区别:浅拷贝是指针拷贝,对一个对象进行浅拷贝,相当于对指向对象的指针进行复制,产生...

  • iOS - copy 与 mutableCopy

    一说到拷贝,就不得不提浅拷贝和深拷贝。 何谓浅拷贝?何谓深拷贝? 往简单的说: 浅拷贝:拷贝地址。 深拷贝:拷贝内...

  • 深拷贝和浅拷贝

    1.深拷贝:地址的拷贝 2.浅拷贝:是值得拷贝 深拷贝和浅拷贝的区别 A拷贝B B变A变是浅拷贝 A拷贝B B变A...

  • js浅拷贝深拷贝

    js浅拷贝,深拷贝的简单实现 基础数据 浅拷贝 深拷贝

网友评论

      本文标题:浅拷贝的认识

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