美文网首页
bunny笔记|深拷贝和浅拷贝的区别,深拷贝的几种方式

bunny笔记|深拷贝和浅拷贝的区别,深拷贝的几种方式

作者: 一只小小小bunny | 来源:发表于2022-05-10 01:10 被阅读0次

1.浅拷贝

浅拷贝是指,对基本类型的值拷贝,以及对象类型的地址拷贝。(基本类型,js的number、string、boolean)

如:
对基本类型的值拷贝

<script>
var a=1;
var b=a;//浅拷贝
b=2;//改变b的值,并不会影响到a,因为浅拷贝对基本类型而言就是值拷,也就是按值传递的类型。
console.log(a);//1
</script>

2.深拷贝

对象类型的地址拷贝

方法一:
当我们对p2进行改造,就不会影响到p1,这就是深拷贝。但是当属性很多的时候,这样处理太繁琐,看第二种方式

<script>
        var p1 = {
            name: 'bunny',
            age: '18'
        }

        var p2 = {
            name: p1.name,
            age: p1.age
        }
</script>
image.png

方法二:Object.assign()
Object.assign()是一种可以对非嵌套对象进行拷贝的方法,如果对象中出现嵌套情况,那么其对被嵌套对象的行为就成了普通的浅拷贝,如果没有嵌套,如下:

<script>
        //源对象
        var p1 = {
            name: "bunny",
            //嵌套,如这里的对象嵌套对象
            p3: {
                name: "小bunny"
            }
        }
        //目的对象
        var p2 = {}

        //深拷贝嵌套对象
        Object.assign(p2, p1)// Object.assign只能拷贝一层
        JSON.stringify(p1)

</script>
image.png

p2对name属性修改是不会影响到p1的原始值的


image.png

或者用JSON进行转换(实战中用最多的方法 JSON.stringify())

image.png

方法三:用递归的方式做深拷贝

<script>
        var bun1 = {
            name: 'hyacinth',
            age: 18,
            per: {
                name: 'Marry'
            }
        }

        var bun2 = deepCopy({}, bun1)

        function deepCopy(dest, src) {
            var dest = dest || {};
            for (let key in src) {
                //如果对象的属性只是对象,则递归处理
                if (typeof src[key] === "object") {
                    dest[key] = (src[key].constructor === Array) ? [] : {};
                    deepCopy(dest[key], src[key])
                } else {
                    dest[key] = src[key]
                }
            }
            return dest;
        }
</script>
image.png

相关文章

  • copy和mutableCopy的区别

    copy和mutableCopy的区别 深拷贝和浅拷贝的区别 在OC中对象的拷贝方式有两种:深拷贝和浅拷贝.浅拷贝...

  • bunny笔记|深拷贝和浅拷贝的区别,深拷贝的几种方式

    1.浅拷贝 浅拷贝是指,对基本类型的值拷贝,以及对象类型的地址拷贝。(基本类型,js的number、string、...

  • js深拷贝浅拷贝

    目录 一.数据类型 二.浅拷贝与深拷贝 三.赋值和浅拷贝的区别 四.浅拷贝的实现方式 五.深拷贝的实现方式 一.数...

  • 深拷贝和浅拷贝

    干货!深拷贝和浅拷贝的区别 深拷贝才是拷贝,浅拷贝就是Retain Copy与Retain的区别 Copy: 根据...

  • iOS--拷贝相关题

    1、什么是深拷贝什么是浅拷贝?浅拷贝和深拷贝的区别 * 浅拷贝(shallow copy):指针拷贝,对于被拷贝对...

  • JavaScript的深拷贝和浅拷贝

    原文 博客原文 大纲 前言1、对深拷贝和浅拷贝的初步认识2、深拷贝和浅拷贝的区别3、浅拷贝存在的缺陷4、深拷贝的实...

  • 深拷贝和浅拷贝

    1.深拷贝:地址的拷贝 2.浅拷贝:是值得拷贝 深拷贝和浅拷贝的区别 A拷贝B B变A变是浅拷贝 A拷贝B B变A...

  • python的浅拷贝和深拷贝

    对于不可变类型,浅拷贝和深拷贝没有区别 对于不可变类型 赋值 浅拷贝 深拷贝

  • 五、面试总结(五)

    对象 拷贝(clone) 如何实现对象克隆 深拷贝和浅拷贝区别 深拷贝和浅拷贝如何实现激活机制 写clone()方...

  • js浅拷贝、深拷贝

    前言 本文主要简单讲一下什么是浅拷贝、什么是深拷贝、深拷贝与浅拷贝的区别,以及怎么进行深拷贝和怎么进行浅拷贝。 一...

网友评论

      本文标题:bunny笔记|深拷贝和浅拷贝的区别,深拷贝的几种方式

      本文链接:https://www.haomeiwen.com/subject/rfekurtx.html