• 浅拷贝与深拷贝的区别


    浅拷贝与深拷贝

    一、数据类型
    数据分为基本数据类型(String, Number, Boolean, Null, Undefined,Symbol)和对象数据类型

    基本数据类型的特点:直接存储在栈(stack)中的数据
    引用数据类型的特点:存储的是该对象在栈中引用,真实的数据存放在堆内存

    引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体

     二、浅拷贝与深拷贝
    深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型的。

    浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。

    深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。

    三、浅拷贝的实现方式

    1.Object.assign()
    Object.assign() 方法可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象。但是 Object.assign()进行的是浅拷贝,拷贝的是对象的属性的引用,而不是对象本身。
    ​2.Array.prototype.concat()

    修改新对象会改到原对象

    3.Array.prototype.slice()

    Array的slice和concat方法不修改原数组,只会返回一个浅复制了原数组中的元素的一个新数组。

    四、深拷贝的实现方式

    1.JSON.parse(JSON.stringify())

    原理: 用JSON.stringify将对象转成JSON字符串,再用JSON.parse()把字符串解析成对象,一去一来,新的对象产生了,而且对象会开辟新的栈,实现深拷贝。

    这种方法虽然可以实现数组或对象深拷贝,但不能处理函数

    2.函数库lodash

    该函数库也有提供_.cloneDeep用来做 Deep Copy

  • 相关阅读:
    第十章、数据库运行维护与优化
    第九章、安全管理
    第八章、数据库后台编程技术
    第七章、高级数据库查询
    第六章、数据库及数据库对象
    第五章、UML与数据库应用系统
    第四章、数据库应用系统功能设计与实施
    struts2标签debug
    SSH框架 more than one namespace has been specificed without a prefix
    Http Status 404
  • 原文地址:https://www.cnblogs.com/Ky-Thompson23/p/12631898.html
Copyright © 2020-2023  润新知