深拷贝与浅拷贝

本文介绍了JavaScript中深拷贝与浅拷贝的区别,包括它们如何处理基本数据类型和引用类型的拷贝过程。通过具体示例展示了两种拷贝方式的不同效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

深拷贝与浅拷贝的区别在哪里呢?

要想搞清楚这个问题,必须要清楚数据类型,js中分为2种数据类型,

基本数据类型(number,string,boolean,null,undefined)

基本数据类型是保存在栈区的,是一个大小固定的内存区域

引用类型(function,object,array,date)

引用类型是保存在堆区的,是大小不固定的内存区域,然后在栈区中保存对应对象在堆区的地址,用白话说就是,引用类型在栈区保存的是堆区的地址指针,其真正的内容数据是保存在堆区的

那么,到这里就可以谈谈深拷贝与浅拷贝的区别了,

浅拷贝:比如是一个引用类型,就是拷贝其在栈区的地址指针

比如:

let obj = {a:1,b:2};
let copyObj = obj;
复制代码

obj与copyObj都是指向同一堆区的地址,就是说如果改变obj,copyObj也跟着发生改变

深拷贝: 就是讲起堆区的数据一并复制,得到两个完全独立的变量,改变其中一个不会影响另外一个。

 function deepClose(obj) {
        let newObj = obj instanceof Array ? [] : {};
        if (typeof obj !== "object") {
            return obj;
        }else {
            // obj 是数组或者是对象,遍历复制
            for (let i in obj) {
                newObj[i] = typeof obj[i] ==="object" ?  deepClose(obj[i]) : obj[i];
            }
        }
        return newObj;
    }
复制代码

转载于:https://juejin.im/post/5acef49a51882555667012a3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值