美文网首页vue集锦
深拷贝与浅拷贝-通俗易懂

深拷贝与浅拷贝-通俗易懂

作者: 小鱼儿_逆流而上 | 来源:发表于2019-12-10 10:33 被阅读0次

哈喽,宝宝们~

最近项目不是很紧张,姐妹儿就给大家多分享一下有用的东西,今天跟大家说说深拷贝与浅拷贝的区别!!!
情景描述
情景描述.png
  • tableData 数据是列表中显示的数据,options 为添加菜单弹框中上级菜单的数据信息;
  • 现在要将 tableData 中的数据赋值给 options,并且在 options 中添加一条数据时不能影响 tableData 的改变;
一、浅拷贝

普通的变量赋值一般都是浅拷贝

// 添加菜单按钮
    creat() {
      // 打开添加菜单窗体
      this.dialogFormVisible = true
      this.dailogTitle = '添加菜单'
      // this.$nextTick()这就是我上一篇讲到的:https://www.jianshu.com/p/1cc770b13058
      this.$nextTick(() => {
        this.form = {}
        this.$refs.ruleForm.resetFields()
      })

      console.log('赋值之前的options,tableData', this.options, this.tableData) // 没赋值之前的 tableData

      浅拷贝
      this.options = this.tableData;
      this.options.unshift(this.NoParent) // 要往this.options里向前添加一个数据unshift()
      console.log('浅拷贝之后的options',this.options,'浅拷贝之后的tableData',this.tableData)
    },
浅拷贝后的数组数据变化.png
  • 通过以上的代码以及图片的展示,可以很明显看出 options 通过赋值后向前添加了一个“无”的数据,此时 tableData 中的数据也同样添加了一个“无”的数据,tableData 也受到了options 变化的影响!!!
  • 此时对 options 来说就是浅拷贝~~~

那么如何做到不影响原数据信息呢,接下来我们来看深拷贝

二、深拷贝

浅拷贝是你,深拷贝就是另外一个你,和你没有任何关系,除了一摸一样外~~~

// 添加菜单按钮
    creat() {
      // 打开添加菜单窗体
      this.dialogFormVisible = true
      this.dailogTitle = '添加菜单'
      // this.$nextTick()这就是我上一篇讲到的:https://www.jianshu.com/p/1cc770b13058
      this.$nextTick(() => {
        this.form = {}
        this.$refs.ruleForm.resetFields()
      })

      console.log('赋值之前的options,tableData', this.options, this.tableData) // 没赋值之前的 tableData

      // 深拷贝
      this.options = JSON.parse(JSON.stringify(this.tableData))
      this.options.unshift(this.NoParent)
      console.log('深拷贝之后的options', this.options, '深拷贝之后的tableData', this.tableData)
    },
深拷贝之后的数组数据变化.png
  • 通过以上的代码以及图片的展示,可以很明显看出 options 通过赋值后向前添加了一个“无”的数据,此时 tableData 中的数据并没有受到options 变化的影响!!!
  • 此时对 options 来说就是深拷贝~~~

  • 这样的话,你怎么处理 options 都不会影响到原 tableData 数据结构!
好了,小伙伴儿们,今天姐妹儿就给大家分享到这里啦,希望可以帮助到大家!!!

相关文章

  • JS中的深拷贝与浅拷贝

    知乎:js中的深拷贝和浅拷贝? 掘金: js 深拷贝 vs 浅拷贝 前言 首先深拷贝与浅拷贝只针对 Object,...

  • 认识js下的浅拷贝与深拷贝

    浅拷贝与深拷贝 首先深拷贝和浅拷贝只针对像 Object, Array 这样的复杂对象的。简单来说,浅拷贝只拷贝一...

  • iOS深拷贝(MutableCopy)与浅拷贝(Copy)的区别

    深拷贝和浅拷贝的概念 iOS中有深拷贝和浅拷贝的概念,那么何为深拷贝何为浅拷贝呢?浅拷贝:浅拷贝并不拷贝对象本身,...

  • Objective-C中的浅拷贝和深拷贝

    Objective-C中的浅拷贝和深拷贝IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解iOS ...

  • 深拷贝和浅拷贝

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

  • js浅拷贝、深拷贝

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

  • iOS 图文并茂的带你了解深拷贝与浅拷贝

    iOS 图文并茂的带你了解深拷贝与浅拷贝 iOS 图文并茂的带你了解深拷贝与浅拷贝

  • 深拷贝和浅拷贝

    1: iOS开发 深拷贝与浅拷贝 2: iOS 浅谈:深.浅拷贝与copy.strong 3: iOS开发——深...

  • [C++之旅] 15 深拷贝与浅拷贝

    [C++之旅] 15 深拷贝与浅拷贝 拷贝构造函数分为深拷贝和浅拷贝两种方式 浅拷贝只是将被拷贝的对象的成员直接赋...

  • 深拷贝VS浅拷贝

    深拷贝VS浅拷贝 本文主要对深拷贝&浅拷贝的解释及实现做一下简单记录。 之所以会有深拷贝与浅拷贝之分,是因为不同数...

网友评论

    本文标题:深拷贝与浅拷贝-通俗易懂

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