如何实现浅拷贝和深拷贝

这篇具有很好参考价值的文章主要介绍了如何实现浅拷贝和深拷贝。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、浅拷贝的实现方法

1.Object.assign方法
        let obj1={
            name:"aaa",
        }
        let obj2={
            age:20
        }

        let obj3=Object.assign(obj1,obj2)
        // obj3.age=30
        console.log(obj1);
        console.log(obj3);
        console.log(obj1==obj3);
        console.log(obj1===obj3);

结果为:

如何实现浅拷贝和深拷贝,面试题,前端,javascript

 2.直接赋值
            let obj1={
                name:"aaa",
                age:20,
                hobby:{
                    life:"eat"
                }
            }
            let obj2=obj1
            obj2.name="hhh"
            console.log(obj1);
            console.log(obj2);
            console.log(obj1==obj2);
            console.log(obj1===obj2);

如何实现浅拷贝和深拷贝,面试题,前端,javascript

 二、深拷贝的实现方法

1.递归
let obj1={
                    name:"aaa",
                    age:20,
                    hobby:["1","2","3"]
                }
                function deepClone(obj){
                    if(obj===null ||typeof obj!=="object"){
                        return obj
                    }
                    let obj2
                    if(obj&&typeof obj==="object"){
                        obj2={}
                        for(let key in obj){
                            if(obj.hasOwnProperty(key)){
                                obj2[key]=deepClone(obj[key])
                            }
                        }
                    }
                    if(Array.isArray(obj)){
                        obj2=[]
                        for(let i in obj){
                            obj2.push(deepClone(obj[i]))
                        }
                    }
                    return obj2
                }
                let obj3=deepClone(obj1)
                // obj3.hobby[1]=5
                console.log(obj3);
                console.log(obj1);
                console.log(obj1==obj3);
                console.log(obj1===obj3);

输出结果为:

如何实现浅拷贝和深拷贝,面试题,前端,javascript

 2.json
let obj1={
                    name:"aaa",
                    age:20,
                    hobby:["1","2","3"]
                }

                let obj2=JSON.parse(JSON.stringify(obj1))
                obj2.hobby[2]="45"
                console.log(obj2);
                console.log(obj1);
                console.log(obj1==obj2);
                console.log(obj1===obj2);

输出结果为:

如何实现浅拷贝和深拷贝,面试题,前端,javascript

 文章来源地址https://www.toymoban.com/news/detail-646919.html

到了这里,关于如何实现浅拷贝和深拷贝的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 原型模式和深拷贝,浅拷贝

    案例引入 克隆羊问题 有一只羊,姓名为tom,年龄为1,颜色为白色,编写程序创建和tom羊属性完全相同的羊。 传统方式解决 代码实现 传统实现方式分析 1.优点是好理解,简单易操作。 2.缺点进行新对象创建时,总是需要重新获取原始对象的属性,如果创建的对象复杂时,效

    2024年02月09日
    浏览(38)
  • 什么是浅拷贝和深拷贝

    javascript 中有不同的方法来复制对象,那么我们怎样才能正确地复制一个对象呢? 本文来介绍一下浅拷贝和深拷贝。 一、什么是浅拷贝(Shallow Copy) 浅拷贝是创建一个新对象,新对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值,如果属性

    2024年02月08日
    浏览(39)
  • js中浅拷贝和深拷贝的区别

    在JavaScript中,浅拷贝(Shallow Copy)和深拷贝(Deep Copy)是两种不同的复制对象的方法,它们之间存在一些重要的区别。 浅拷贝(Shallow Copy): 浅拷贝只复制对象的顶层属性,如果属性是对象或数组,则复制的是引用,而不是实际的对象。这意味着,如果更改了复制后的对象

    2024年01月20日
    浏览(34)
  • 一文彻底理解python浅拷贝和深拷贝

    万物皆对象:在学习python的深浅拷贝之前我们必须要知道一个事情,就是python对象的引用,在python里面, 万物皆对象,万物皆对象,万物皆对象 ,不管什么数据类型都是对象。我们定义一个变量并给这个变量赋值的时候赋的并不是这个对象值,而是这个对象引用,并不是一

    2024年02月07日
    浏览(48)
  • 理解C#中对象的浅拷贝和深拷贝

    本文章主要介绍C#中对象的拷贝,其中包括浅拷贝和深拷贝,以及浅拷贝和深拷贝的实现方式,不同的实现方式之间的性能对比。   浅拷贝是指将对象中的数值类型的字段拷贝到新的对象中,而对象中的引用型字段则指复制它的一个引用到目标对象。如果改变目标对象中引用

    2024年02月08日
    浏览(44)
  • Python - 拷贝 - 浅拷贝(Shallow Copy)和深拷贝(Deep Copy)

    假设我以这样的方式创建一个 3 x 5 的二维数组: 然后我修改 a [ 2 ] [ 3 ] a[2][3] a [ 2 ] [ 3 ] 的值为 1 1 1 : 结果会发现数组 a a a 中第二维坐标为 3 3 3 的数全部被修改为了 1 1 1 ,而没有发生“第一维坐标为 2 2 2 的数全部被改成了 1 1 1 ” 这就涉及到了Python中的拷贝机制。 Python中

    2023年04月08日
    浏览(39)
  • 【JavaScript】面试手撕深拷贝

    🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​ 💫个人格言: \\\"如无必要,勿增实体\\\" 上次讲了浅拷贝,这次我们来讲深拷贝。有一说一,深拷贝也算是面试时非常常见的题目了。🐶 深拷贝的作用 首先为什么需要深拷贝,因为浅拷贝无法满足我们对原

    2024年03月13日
    浏览(46)
  • Python入门【变量的作用域(全局变量和局部变量)、参数的传递、浅拷贝和深拷贝、参数的几种类型 】(十一)

     👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白 📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀 🔥如果感觉博主的文章还不错

    2024年02月15日
    浏览(51)
  • JavaScript深拷贝(js深拷贝,JavaScript递归函数,实现深拷贝)

    简述:JavaScript的深拷贝和浅拷贝大家都比较熟悉,今天来分享下深拷贝,就是使用该函数时,会复制拷贝一份该数据,修改该数据属性,不会改变原有数据,就是把复制的对象所引用的对象全都复制了一遍,具体实现如下; 1、定义拷贝对象; 2、定义递归函数deepClone(),实现

    2024年02月15日
    浏览(62)
  • 前端面试题(第三弹)——js对象的基本方法和深浅拷贝

    第一种 第二种 1.configurable:属性是否可以通过delete删除,默认值为true。 2.enumberable:属性是否可以通过for in 进行循环返回,默认值为true。 3.writable:属性是否可被修改,默认值为true。 4.value:属性实际的值,默认为undefined。 访问器属性有四个属性类型,也是使用Object.defin

    2024年02月13日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包