对象直接赋值时,例如

let b = { name: 'name', age: 12}

let a=b,

a.age = 13

console.log(b.age)  // 13

由此可见,当改变 a 的属性值时,b也会随之改变,因为这是一个引用传递而不是值传递,a和b指向的是同一个内存地址,修改a后b所指向的地址的值也会发生改变。

如果我们不想让被赋值的对象跟着联动变化时,需使用深拷贝的方式

1. 创建一个js文件,deepclone.js

/**
* 对象深拷贝
*/
export const deepClone = data => {
var type = getObjType(data)
var obj
if (type === 'array') {
obj = []
} else if (type === 'object') {
obj = {}
} else {
// 不再具有下一层次
return data
}
if (type === 'array') {
for (var i = 0, len = data.length; i < len; i++) {
obj.push(deepClone(data[i]))
}
} else if (type === 'object') {
for (var key in data) {
obj[key] = deepClone(data[key])
}
}
return obj
}

2. 引入并使用

import { deepClone } from "deepClone.js";

this.cloneData= deepClone(this.data)

vue对象深拷贝(避免对象赋值,改变一个对象的值,另一个对象也变化)的更多相关文章

  1. vue爬坑:把对象中的数据给了某个变量,改变一个对象的值,另一个对象也变化

    今天做项目碰到了 一个坑,一个vue变量赋值给一个新的变量,对这个新的变量里的值做更改,vue的变量也变了.记录一下这个坑坑~~ 然后百度搜到了一个解决方案: 就是把变量先转成字符串,再把字符串转成对 ...

  2. vue遍历数组和对象的方法以及他们之间的区别

    前言:vue不能直接通过下标的形式来添加数据,vue也不能直接向对象中插值,因为那样即使能插入值,页面也不会重新渲染数据 一,vue遍历数组   1,使用vue数组变异方法 pop() 删除数组最后一 ...

  3. js 数组对象深拷贝

    js 数组对象深拷贝 结论:对象的拷贝不能采用直接赋值的方式. 背景 踩过的坑如下: formData本来是父组件传过来的,但是我不想直接用,于是我直接赋值给一个formDataCopy的对象. 但是 ...

  4. 什么是 Java 对象深拷贝?面试必问!

    点击上方蓝色链接,关注并"设为星标" Java干货,每天及时推送 介绍 在Java语言里,当我们需要拷贝一个对象时,有两种类型的拷贝:浅拷贝与深拷贝. 浅拷贝只是拷贝了源对象的地址 ...

  5. Java clone() 方法克隆对象——深拷贝与浅拷贝

    基本数据类型引用数据类型特点 1.基本数据类型的特点:直接存储在栈(stack)中的数据 2.引用数据类型的特点:存储的是该对象在栈中引用,真实的数据存放在堆内存里 引用数据类型在栈中存储了指针,该指 ...

  6. [C#]对象深拷贝

    关键代码: /// <summary> /// 对象深拷贝 /// </summary> /// <typeparam name="T">泛型& ...

  7. .NEL IL实现对象深拷贝

    对于深拷贝,通常的方法是将对象进行序列化,然后再反序化成为另一个对象.例如在stackoverflow上有这样的解决办法:https://stackoverflow.com/questions/785 ...

  8. 【转】.NET IL实现对象深拷贝

    对于深拷贝,通常的方法是将对象进行序列化,然后再反序化成为另一个对象.例如在stackoverflow上有这样的解决办法:https://stackoverflow.com/questions/785 ...

  9. .NET IL实现对象深拷贝

    对于深拷贝,通常的方法是将对象进行序列化,然后再反序化成为另一个对象.例如在stackoverflow上有这样的解决办法:https://stackoverflow.com/questions/785 ...

  10. 剑指offer——合并两个排序的链表——对象、引用和赋值初接触

    题目描述:输入两个单调递增的链表,输出两个链表合成后的链表,当然,我们需要合成后的链表满足单调不减规则. 先公布结果: /* public class ListNode { int val; List ...

随机推荐

  1. ethcat开发记录 三

    一.关于controlword的控制 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 保留 待定 暂停 故障复位 模式有关 伺服使能 快停 上电 伺服准备好    

  2. CH32F103C8T6的USB开发(一)

    一.背景 项目用到单片机采集模拟量数据,原先使用USB转串口,速度嫌慢,还要转串口芯片,电脑还要安装驱动,现更改为采用USB的HID类来传输. 二.单片机选型 STM32F103的USB接口简单易用, ...

  3. elementUI table 数组中各项加逗号隔开

    js处理 //this.newTableData 数组 this.newTableData.map((item,index)=>{ //item.label 数组 if(item.label){ ...

  4. 记录Echarts官网打开慢的解决方法

    进入C:\Windows\System32\drivers\etc: 在hosts文件里添加 151.101.2.132 echarts.apache.org

  5. bert一些思考

    bert结构 首先是embdding lookup,[batch * seq]-->[batch, seq, hidden] 然后是加个mask embdding和type embdding和p ...

  6. AirSim 自动驾驶仿真 (2-3) python控制无人机 win10

    1首先搭建好环境 参考 2 python控制 https://blog.csdn.net/Zhaoxi_Li/article/details/108002544 官方代码位置 自己pythonj教程 ...

  7. 2月23日javaweb之Maven

    Maven常用命令 compile:编译 clean:清理 test:测试 package:打包 install:安装 Maven生命周期 Maven对项目构建的生命周期描述是一次构建过程经历了多少个 ...

  8. Training time_SSM

    三阶段 MyBatis 1 三层架构介绍 2 MyBatis介绍 类库:对于现有技术的一个封装. 框架:对于一个问题的一整套解决方案. MyBatis是一个半自动的ORM持久层的框架.刚开始叫做iBa ...

  9. Python笔记(5)——if 语句一:条件测试(Python编程:从入门到实践)

    每条if语句的核心都是一个值为True或False的表达式.Python根据条件测试的值为True还是False来决定是否执行if语句中的代码.如果条件测试的值为True,Python就执行紧跟在if ...

  10. heimaJava18_线程

    Java 线程 单线程 线程(thread)是一个程序内部的一条执行路径. main方法的执行其实就是一个单独的执行路径 程序中如果只有一条执行路径,那么这个程序就是单线程的程序 多线程 多线程是指从 ...