博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript数据存储和深浅拷贝实际运用
阅读量:5121 次
发布时间:2019-06-13

本文共 1257 字,大约阅读时间需要 4 分钟。

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 = {};      }    },

  

转载于:https://www.cnblogs.com/JiAyInNnNn/p/11053009.html

你可能感兴趣的文章
AsyncTask和Handler
查看>>
读书笔记
查看>>
第三篇 Flask 中的模板语言 Jinja2 及 render_template 的深度用法
查看>>
小学课程资源网
查看>>
Django + Mysql 中关于时间异常返回500错误的解决
查看>>
北京集训:20180325
查看>>
KVO
查看>>
鱼眼菜单Demo
查看>>
堆排序
查看>>
mysql基础之锁协议,事务隔离级别,加锁顺序
查看>>
判断你的设备是iPhone还是iPod
查看>>
APP营销模式
查看>>
赵栋《面向对象程序设计(java)》第十四周学习总结
查看>>
12.k8s的存储卷创建过程
查看>>
解决关于IIS10.0下无法安装 URL 重写模块 2的问题
查看>>
py进制换算器
查看>>
Android 6.0 前\后怎么做Activity劫持
查看>>
HDU 1069 Monkey and Banana
查看>>
POJ 3273
查看>>
hdu 3037 Saving Beans lucas定理
查看>>