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中,当需要对数据进行操作时,通常会选择使用深拷贝来确保数据的独立性。
相关推荐
huwuhang4 分钟前
跨平台电子书阅读器 | Readest最新版 安卓版+PC版全平台
android·前端·javascript
C澒4 分钟前
AI 生码:RAG 检索优化实现可评估、可回溯工程化
前端·ai编程
Shirley~~5 分钟前
力扣hot100:每日温度
开发语言·javascript·ecmascript
条tiao条6 分钟前
不止语法糖:TypeScript Set 与 Map 深度解析
前端·javascript·typescript
freewlt27 分钟前
React Server Components 深度解析:从原理到实战的完整指南
前端·javascript·react.js
zhensherlock1 小时前
Protocol Launcher 系列:1Writer iOS 上的 Markdown 文档管理
javascript·笔记·ios·typescript·node.js·iphone·ipad
ZC跨境爬虫1 小时前
Playwright进阶操作:鼠标拖拽与各类点击实战(含自定义拖拽实例)
前端·爬虫·python·ui
小江的记录本1 小时前
【RabbitMQ】RabbitMQ核心知识体系全解(5大核心模块:Exchange类型、消息确认机制、死信队列、延迟队列、镜像队列)
java·前端·分布式·后端·spring·rabbitmq·mvc
心静财富之门1 小时前
《前端零基础入门:HTML + CSS + JavaScript 全套速查表(详细版 + 实例)》
前端·javascript·python
星空1 小时前
前端--A_4--HTML表单
前端