资讯专栏INFORMATION COLUMN

js中深拷贝与浅拷贝(堆内存、栈内存的关系)

AlienZHOU / 2129人阅读

摘要:而堆内存主要负责像对象这种变量类型的存储,如下图引用类型中复制浅拷贝的只是栈内存中的指针,指向同一个堆内存的对象如何实现深拷贝最简单的方法就是与方法

浅拷贝只会在引用类型中出现

基本数据类型有哪些,number,string,boolean,null,undefined,symbol以及未来ES10新增的BigInt(任意精度整数)七类。

引用数据类型(Object类)有常规名值对的无序对象{a:1},数组[1,2,3],以及函数等。

首先看一下定义

深拷贝:简单来说假设B复制了A,当修改A时,B不发生变化
浅拷贝:简单来说假设B复制了A,当修改A时,B也发生变化

实际情况能碰到
    
    let temp1 = {
        a: 1
    }
    temp1 = temp2
    temp2.a = 2
    console.log(temp1.a)  // 这里输出2
    

也就是temp1 复制了 temp2,temp2的值改变了,temp1也随之改变
以上是一个标准的浅拷贝

了解一下js中的堆内存与栈内存

在js引擎中对变量的存储主要有两种位置,堆内存和栈内存。

和java中对内存的处理类似,栈内存主要用于存储各种基本类型的变量,包括Boolean、Number、String、Undefined、Null,symbol以及对象变量的指针,这时候栈内存给人的感觉就像一个线性排列的空间,每个小单元大小基本相等。

而堆内存主要负责像对象Object这种变量类型的存储,如下图

引用类型中复制(浅拷贝)的只是栈内存中的指针,指向同一个堆内存的对象
如何实现深拷贝

最简单的方法就是JSON.stringify与JSON.parse方法

    function deepClone(obj){
        let _obj = JSON.stringify(obj),
            objClone = JSON.parse(_obj);
        return objClone
    }





文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/109440.html

相关文章

  • JS中深拷贝与浅拷贝

    摘要:地址传递引用类型则是地址传递,将存放在栈内存中的地址赋值给接收的变量。即对象的浅拷贝会对主对象进行拷贝,但不会复制主对象里面的对象。 相关知识点 1.javascript变量包含两种不同数据类型的值:基本类型和引用类型。 基本类型值指的是简单的数据段,包括es6里面新增的一共是有6种,具体如下:number、string、boolean、null、undefined、symbol。 引...

    ranwu 评论0 收藏0
  • JS拷贝与浅拷贝

    摘要:中的深拷贝与浅拷贝说到深浅拷贝的时候就不得不说一下中的变量类型了基本类型按值存放在栈内存中的简单数据段可以直接访问引用类型存放在堆内存中的对象变量保存的是一个指向存放数据位置的指针访问引用类型的值时首先从栈中获取到存放该数据位置的指针然后再 JS中的深拷贝与浅拷贝 说到深浅拷贝的时候就不得不说一下JS中的变量类型了: 基本类型: undefined、null、boolean、numb...

    ARGUS 评论0 收藏0
  • 面试篇---1 如何区分深拷贝与浅拷贝

    摘要:引用数据类型名存在栈内存中,值存在于堆内存中,但是栈内存会提供一个引用的地址指向堆内存中的值,我们以上面浅拷贝的例子画个图当进行拷贝时,其实复制的是的引用地址,而并非堆里面的值。 如何区分深拷贝与浅拷贝? 简单来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,自食其力。 浅拷贝例子: var a=[0,1...

    jsdt 评论0 收藏0
  • JS拷贝与浅拷贝

    摘要:什么是深拷贝浅拷贝见名知义,无论是深拷贝还是浅拷贝,都是的问题。使用如下以上就是关于中的深拷贝与浅拷贝的知识和如何进行深拷贝的知识了,如果有错或者有其他方式的话,欢迎在下面留言评论啦 前言 最近在写项目的时候涉及到一些父子组件传递个对象或者数组通信啥的,或者是直接复制添加对象啥的,直接使用赋值的时候总会出错。一查原来是浅拷贝的问题,就从网上找了点资料,汇总到这里来了。 1 什么是深拷贝...

    ztyzz 评论0 收藏0
  • javascript拷贝VS浅拷贝

    摘要:深拷贝浅拷贝本文主要对深拷贝浅拷贝的解释及实现做一下简单记录。之所以会有深拷贝与浅拷贝之分,是因为不同数据类型的数据在内存中的存储区域不一样。但注意,只能做一层属性的浅拷贝。 深拷贝VS浅拷贝 本文主要对深拷贝&浅拷贝的解释及实现做一下简单记录。原文链接,欢迎star。 之所以会有深拷贝与浅拷贝之分,是因为不同数据类型的数据在内存中的存储区域不一样。 堆和栈是计算机中划分出来用来存储的...

    Nekron 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<