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中,当需要对数据进行操作时,通常会选择使用深拷贝来确保数据的独立性。
相关推荐
JIngJaneIL几秒前
基于java+ vue家庭理财管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
GISer_Jing4 分钟前
Taro跨端开发实战:JX首页实现_Trae SOLO构建
前端·javascript·aigc·taro
vipbic5 分钟前
基于 Nuxt 4 + Strapi 5 构建高性能 AI 导航站
前端·后端
不要em0啦27 分钟前
从0开始学python:简单的练习题3
开发语言·前端·python
老华带你飞28 分钟前
电商系统|基于java + vue电商系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
星月心城31 分钟前
面试八股文-JavaScript(第四天)
开发语言·javascript·ecmascript
大猫会长34 分钟前
关于http状态码4xx与5xx的背锅问题
前端
喝拿铁写前端42 分钟前
AI 驱动前端开发覆盖的能力全景拆解
前端·javascript·人工智能
1024小神44 分钟前
确认了,Cloudflare的R2对象存储S3接口api不支持在web端使用
前端
不染尘.1 小时前
应用层之WWW
服务器·javascript·css·网络·网络协议·计算机网络·html