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中,当需要对数据进行操作时,通常会选择使用深拷贝来确保数据的独立性。
相关推荐
Jonathan Star30 分钟前
沉浸式雨天海岸:用A-Frame打造WebXR互动场景
前端·javascript
工业甲酰苯胺1 小时前
实现 json path 来评估函数式解析器的损耗
java·前端·json
老前端的功夫1 小时前
Web应用的永生之术:PWA落地与实践深度指南
java·开发语言·前端·javascript·css·node.js
LilySesy2 小时前
ABAP+WHERE字段长度不一致报错解决
java·前端·javascript·bug·sap·abap·alv
Wang's Blog2 小时前
前端FAQ: Vue 3 与 Vue 2 相⽐有哪些重要的改进?
前端·javascript·vue.js
再希3 小时前
React+Tailwind CSS+Shadcn UI
前端·react.js·ui
用户47949283569153 小时前
JavaScript 的 NaN !== NaN 之谜:从 CPU 指令到 IEEE 754 标准的完整解密
前端·javascript
群联云防护小杜3 小时前
国产化环境下 Web 应用如何满足等保 2.0?从 Nginx 配置到 AI 防护实战
运维·前端·nginx
ss2733 小时前
Springboot + vue 医院管理系统
vue.js·spring boot·后端
醉方休4 小时前
Web3.js 全面解析
前端·javascript·electron