前端小白的学习之路(深,浅拷贝)

本文介绍了JavaScript中拷贝数据的两种主要方式:浅拷贝和深拷贝。浅拷贝只复制第一层数据,而深拷贝则递归复制所有层级,确保独立性。通过示例展示了如何使用自定义函数实现这两种复制方法。
摘要由CSDN通过智能技术生成

文章目录


一、拷贝是什么?

1.概念

        拷贝就是复制的意思。在JS中通常是指复制数据。

2.两种数据类型的拷贝方式

        1: 基本数据类型

                number(数字)  string(字符串)  boolean(布尔值) undefined(未定义) null(空) symbol(符号)

                基本数据类型直接传值互不影响。

var a = 100;

var b = a; // 赋值、传值

b = 99;

console.log(a);// 100

console.log(b);// 99

        2: 引用数据类型

                object(对象)  array(数组)  function(函数)

                 引用数据类型一般是传地址,由于共用一个地址导致数据会相互影响

var c = { color: "red" }

var d = c;// 传址、传地址

d["color"] = "green";

console.log(c);// {color: "green"}

console.log(d);// {color: "green"}

二、使用方法

        1.浅拷贝

                浅拷贝不对数据的数据类型进行判断,只拷贝第一层数据,不能拷贝如二维数组之类的有嵌套关系的数据。

                代码如下:

// 封装浅拷贝函数
function simpleCopy(data) {
    // 判断data是否为数据集合
    if (typeof data === 'object') {
        // 判断是数组,还是对象
        var newData = Array.isArray(data) == true ? [] : {};
        // 循环
        for (var key in data) {
            // 复制
            newData[key] = data[key];
        }
        // 循环结束,返回新的数据集合
        return newData;
    }
}

        2.深拷贝

                在复制数据的过程中,会判断每一层结构的数据类型,通过递归的方式,不断复制,不断判断数据类型,如果是基本数据类型,就直接复制,传值; 如果是引用数据类型,就执行递归,直到复制的数据为基本类型为止。

                代码如下:

//封装深拷贝函数
function deepCopy(data){
      // 创建新地址
     var newData = Array.isArray(data) === true ? [ ]: {};
     // 循环data
    for(var key in data){
           // 判断拷贝的数据是否为引用类型
     if(typeof data[key] === "object")
        //执行递归,直到复制的数据为基本类型为止
        newData[key] = deepCopy(data[key]);
    }
    else {
                     //是基本数据类型,就直接复制
     newData[key] = data[key]
    }
    }
    //返回新数据
    return newData;
}

var newObj2 =  deepCopy(obj2)
newObj2["result"]["width"] = "99px";
console.log(obj2);//  {color: "red", result: {width: "100px"}}
console.log(newObj2);//  {color: "red", result: {width: "99px"}}

                


总结

深拷贝和浅拷贝是在复制对象或数组时使用的两种不同的方法。

浅拷贝是指创建一个新的对象或数组,新对象或数组中的元素是原始对象或数组中元素的引用。这意味着,如果原始对象或数组中的元素是对象或数组,它们仍然会被共享。

深拷贝是指创建一个完全独立的新对象或数组,新对象或数组中的元素与原始对象或数组中的元素完全相同,但不共享引用关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值