浅拷贝与深拷贝

本文探讨了JavaScript中的浅拷贝和深拷贝概念,以及它们在处理复杂数据结构时的区别。通过示例展示了如何实现深拷贝函数,该函数能够递归复制对象和数组,确保修改副本不会影响原始数据。同时,文章提供了检测数据类型的辅助函数,以确保正确处理各种数据类型。
摘要由CSDN通过智能技术生成

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

所谓的浅拷贝就是将原数据重新进行二次赋值, 当我们修改了现引用数据类型的内容, 原引用数据类型的内容也会发生变化

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

所谓的深拷贝就是将数据重新进行复制, 复制的之后的数据与原数据没有任何关联,当我们修改新数据的时候, 原数据不会发生变化

 

 

   function getDataType(arg) {
        // 检测变量的数据类型
        let dataType = Object.prototype.toString.call(arg); // [object String]

        let mapType = {
            '[object Boolean]': 'boolean',
            '[object Number]': 'number',
            '[object String]': 'string',
            '[object Function]': 'function',
            '[object Array]': 'array',
            '[object Date]': 'date',
            '[object RegExp]': 'regExp',
            '[object Undefined]': 'undefined',
            '[object Null]': 'null',
            '[object Object]': 'object'
        }

        return mapType[dataType]
    }

    var array = ["vue", 1, undefined, true, null, function test() { }, { age: 1 }, ["html", "css"]]

    function copy(array) {
        var obj;
        var str = getDataType(array)
        if (str === 'array') {
            obj = []
            for (let i = 0; i < array.length; i++) {
                obj.push(copy(array[i]))
            }
        } else if (str === 'object') {
            obj = {}
            for (let i in array) {
                obj[i] = copy(array[i])
            }
        } else {
            return array
        }
        return obj
    }
    var data = copy(array)
    data[6].age = 100
    data[7][0] = "git"
    console.log("old",array)
    console.log("new", data)

1.首先我们需要封装一个可以判断数据类型的函数,

2.写一个深拷贝函数方法,引用判断数据类型的函数,判断数据,如果是多种类型,那么我们就要用到循环递归去添加到新的数据中

3.直接使用深拷贝函数方法,拷贝数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值