美文网首页
JS数据存储和深浅拷贝实际运用①

JS数据存储和深浅拷贝实际运用①

作者: JiAyInNnNn | 来源:发表于2019-06-19 15:38 被阅读0次

JavaScript分两种数据类型。
1.简单数据类型有:number, string, boolean, undefined和null
当声明一个简单数据类型的变量时,在内存中会把数据存在栈里。
2.复杂数据类型。Object

var student = new Person

当我创建一个实例的时候,会在内存中开辟一个空间,对象存放在堆里,student是一个内存地址,指向堆中的对象。

深拷贝和浅拷贝就是在存储复杂数据时产生的问题。

浅拷贝就是我只获取到了这个对象的内存地址,可以指向原对象。当我修改时,原对象也会改变。
深拷贝就是重新创建了一个空间,对象放在堆里,我修改原对象不影响我新创建的对象。

实际上在开发过程中,遇到了一个问题,就是有关于深浅拷贝的。

首先介绍一下开发背景。是一个后台管理项目。表格数据后有编辑页面,编辑页面与添加页面服用,利用了vue的父子传值,当我是添加时,父组件给子组件是一个空对象,当我是编辑时,传入当前表格一行的数据以对象的形式传给子组件。
子组件的方法

  // 打开弹窗
    dialogOpen() {
      console.log('打开页面',this.expert)
      this.$refs.form.resetFields();
      if (this.expert.id) {
        // 进入修改
         this.form = this.expert
      } else {
        this.form = {};
      }
    },

通过expert.id 判断是否是添加页面,如果是,把expert里的内容传给当前表单,如果不是,表单内容清空。

 props: {
    expert: Object,
    value: Boolean
  },

该组件接收的值

出现的问题就是:当我打开编辑弹窗后,并没有做任何修改关闭页面,列表页的当前列表数据变成空。


问题截图

出现原因:当我进入编辑页面时,this.form = this.expert 是浅拷贝,复制了对象的地址。当我点击添加时,在父组件中给this.expert ={},此时,this.form就是空的,再点击编辑,form也是空的了。

解决后的代码

  // 打开弹窗
    dialogOpen() {
      console.log('打开页面',this.expert)
      this.$refs.form.resetFields();
      if (this.expert.id) {
        // 进入修改
         this.form = {...this.expert}// 深拷贝
      } else {
        this.form = {};
      }
    },

相关文章

  • JS数据存储和深浅拷贝实际运用①

    JavaScript分两种数据类型。1.简单数据类型有:number, string, boolean, unde...

  • JS对象和数组深浅拷贝总结②

    在实际开发中遇到过太多次深拷贝浅拷贝的问题。总结一下~ JS数据存储和深浅拷贝实际运用① 这是之前写过的一篇文章,...

  • 重新认识js复杂类型数据的引用和深浅拷贝

    js 基本概念———— 数据类型 js 深浅拷贝之概念 代码实现 —— 数组和对象的j浅拷贝 代码实现 —— 数组...

  • JS文集的目录

    js基础心法 深浅拷贝(递归)深浅拷贝(首层浅拷贝) js 数据处理 数组对象查找的常见操作数组对象去重的常见操作...

  • 深拷贝

    深浅拷贝 拷贝为什么要分深浅?因为值区分为原始值和引用值。 原始值: 存储在栈中的简单数据段,即他们的值直接存储在...

  • JavaScript对象的拷贝

    本文主要介绍js对象的拷贝,包括浅拷贝和深拷贝,侧重实际方式,简单介绍概念。 一、js数据类型 js数据有不同的划...

  • 成长(6/2000)——面试题合集3

    深浅拷贝 概念 js的数据类型分为一般数据类型(number、string、array、undefined和nul...

  • js的深浅拷贝

    js的深浅拷贝可以分为数组的深浅拷贝和对象的深浅拷贝 一、数组的深浅拷贝如果只是简单的将数组中的元素付给另外一个数...

  • js 深拷贝和浅拷贝

    在讲深拷贝和浅拷贝的时候先说一下js的数据类型,因为在我理解而言只有引用类型才有深浅拷贝的概念 基本数据类型 首先...

  • JS深浅拷贝的区别以及实现深拷贝的方法

    深浅拷贝的区别: 区别在于被拷贝对象的值为引用型时,拷贝的是该对象栈中存储的指针地址,该地址指向堆中存储数据的具体...

网友评论

      本文标题:JS数据存储和深浅拷贝实际运用①

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