Vue的深浅拷贝

深拷贝和浅拷贝是在JavaScript中常见的概念,Vue中也涉及到了深浅拷贝的问题。深拷贝和浅拷贝主要是针对对象和数组进行操作的,涉及到引用类型的数据。

浅拷贝:是指将原始对象的属性值复制到新对象中,如果属性值是基本类型(Number、String、Boolean、undefined、null、Symbol),那么直接复制其值;如果属性值是引用类型(Array、Object、Function),则复制其引用地址。这意味着如果原始对象的属性值是引用类型,那么新对象和原始对象的该属性值指向同一个内存地址,修改其中一个对象的该属性值会影响另一个对象的该属性值。
深拷贝:是指将原始对象的所有属性值都复制到新对象中,包括引用类型的属性值。这意味着无论原始对象的属性值是基本类型还是引用类型,新对象都会开辟新的内存地址存储该属性值,修改其中一个对象的属性值不会影响另一个对象的属性值。
简单的Vue组件代码,演示了深拷贝和浅拷贝的原理和场景:
javascript 复制代码
<template>
  <div>
    <p>Original Data: {{ originalData }}</p>
    <p>Shallow Copied Data: {{ shallowCopiedData }}</p>
    <p>Deep Copied Data: {{ deepCopiedData }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      originalData: {
        name: 'John',
        age: 25,
        hobbies: ['reading', 'music']
      },
      shallowCopiedData: {},
      deepCopiedData: {}
    };
  },
  created() {
    // 浅拷贝
    this.shallowCopiedData = Object.assign({}, this.originalData);
    
    // 深拷贝
    this.deepCopiedData = JSON.parse(JSON.stringify(this.originalData));
    
    // 修改原始数据
    this.originalData.name = 'Tom';
    this.originalData.hobbies.push('sports');
  }
};
</script>
总结:通过这个例子,我们可以看到浅拷贝和深拷贝的区别。浅拷贝后的shallowCopiedData的hobbies属性值会受到原始数据的影响,而深拷贝后的deepCopiedData的hobbies属性值不受原始数据的影响。因此,在Vue中,当需要对数据进行操作时,通常会选择使用深拷贝来确保数据的独立性。
相关推荐
乐迪绘防伪油墨技术分享22 分钟前
特种功能油墨选型指南:温变 / 遇水 / 荧光 / UV LED 技术对比与供应商参考
前端·html·uv
cll_86924189122 分钟前
WordPress Single Post 文章页美化:响应式表格、图片优化与自动悬浮 Table of Contents(CSS + JS)
前端·css
爱勇宝34 分钟前
用了一个月 WorkBuddy,聊聊我的真实感受
前端·后端·程序员
愛芳芳1 小时前
基于 Electron + Vue3 的仿 PC 微信客户端项目实战
前端·javascript·css·elementui·typescript·electron·vue
阿虎儿1 小时前
论 JavaScript 的怪异之处
javascript
你别说话了1 小时前
Vue实现高效拖拽效果 vue-Draggable
前端·vue.js
万物智能1 小时前
PWM散热风扇设置—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
前端·后端·算法
志尊宝1 小时前
Vue3 零基础每日笔记(036):动手封装 useTitle 与 useToggle——最小的组合式函数
vue.js·#vue #前端 #前端开发·#javascript·#vue.js
专业程序开发源1 小时前
springboot旅游推荐系统82074-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·php·课程设计·旅游
前端柱子1 小时前
q-floodfill白边锯齿?一招搞定抗锯齿边缘问题
前端