【JavaScript】32_浅拷贝和深拷贝

举报
魔天伦 发表于 2023/03/03 16:30:05 2023/03/03
【摘要】 7、浅拷贝和深拷贝 浅拷贝(shallow copy)通常对对象的拷贝都是浅拷贝浅拷贝顾名思义,只对对象的浅层进行复制(只复制一层)如果对象中存储的数据是原始值,那么拷贝的深浅是不重要浅拷贝只会对对象本身进行复制,不会复制对象中的属性(或元素) 深拷贝(deep copy)深拷贝指不仅复制对象本身,还复制对象中的属性和元素因为性能问题,通常情况不太使用深拷贝 <script> ...

7、浅拷贝和深拷贝

浅拷贝(shallow copy)

  • 通常对对象的拷贝都是浅拷贝
  • 浅拷贝顾名思义,只对对象的浅层进行复制(只复制一层)
  • 如果对象中存储的数据是原始值,那么拷贝的深浅是不重要
  • 浅拷贝只会对对象本身进行复制,不会复制对象中的属性(或元素)

深拷贝(deep copy)

  • 深拷贝指不仅复制对象本身,还复制对象中的属性和元素
  • 因为性能问题,通常情况不太使用深拷贝
    <script>
        //创建一个数组
        const arr = [{name:'孙悟空'},{name:'猪八戒'}]
        const arr2= arr.slice()//浅拷贝

        const arr3 = structuredClone(arr)//专门用来深拷贝的方法

        console.log(arr)
        console.log(arr3)
    </script>

8、对象的复制

对象的复制

  • Object.assign(目标对象, 被复制的对象)

  • 将被复制对象中的属性复制到目标对象里,并将目标对象返回

  • 也可以使用展开运算符对对象进行复制

… (展开运算符)

  • 可以将一个数组中的元素展开到另一个数组中或者作为函数的参数传递
  • 通过它也可以对数组进行浅复制
    <script>
        const arr = ['孙悟空','猪八戒','沙和尚']
        const arr2 = arr.slice()

        console.log(arr===arr2)//false

        // const arr3 = [arr[0],arr[1],arr[2]]
        const arr3 = [...arr]//效果一致
        // const arr3 = ['唐僧',...arr,'白骨精']

        console.log(arr)
        console.log(arr3)
    </script>
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。