首页 > 编程语言 >JavaScript 解构赋值 是 浅拷贝还是深拷贝

JavaScript 解构赋值 是 浅拷贝还是深拷贝

时间:2024-09-30 10:12:58浏览次数:9  
标签:name age JavaScript 解构 marriage 拷贝 赋值

解构赋值是ES6(ECMAScript 2015)引入的一个特性,它允许我们可以快速取出数组或者对象中的值并赋值给新的变量。

const a = {
      name: 'name',
      age: 18,
      marriage: false,
    }

let { name, age, marriage} = a;
console.log(name, age, marriage) // 打印信息:name 18 false

明确一下深拷贝和浅拷贝的定义

深拷贝:修改新变量的值不会影响原有变量的值。默认情况下基本数据类型(number,string,null,undefined,boolean)都是深拷贝。
浅拷贝:修改新变量的值会影响原有的变量的值。默认情况下引用类型(object)都是浅拷贝。

基本数据类型,直接用等号赋值,也都是深拷贝

引用类型,直接用等号赋值,是浅拷贝

回到解构赋值,使用如下示例代码

const a = {
      name: 'name',
      age: 18,
      marriage: false,
    }

let { name, age, marriage} = a;

name = 'name1';
age = 20;
marriage = true;
console.log(a)

 我们会发现 name, age, marriage 的改变没有修改原对象的值
修改一下上述的代码

const a = {
      name: 'name',
      age: 18,
      marriage: false,
      addr: { province: 'sichuan', city: 'chengdu' }
    }

let { name, age, marriage, addr } = a

name = 'myname'
age = 26
marriage = true
addr.province = 'shanghai'
addr.city = 'shanghai'

console.log(name, age, marriage, addr) 
console.log(a)

 此时我们发现, 对象 a 属性 addr 的值被结构所得的 addr 所影响

总结:解构赋值,如果所解构的原对象是一维数组或对象,其本质就是对基本数据类型进行等号赋值,那它就是深拷贝;

如果是多维数组或对象,其本质就是对引用类型数据进项等号赋值,那它就是浅拷贝;

最终的结论就是:解构赋值是浅拷贝(因为它确实不能对多维数组或对象达到深拷贝的作用)

标签:name,age,JavaScript,解构,marriage,拷贝,赋值
From: https://www.cnblogs.com/xxaxf/p/18441235

相关文章

  • 从 ES5 到 ES14:深入解析 JavaScript 的演进与特性
    文章目录前言一、ES5(ECMAScript2009)1.严格模式('usestrict')2.Object.defineProperty3.Array.isArray4.forEach,map,filter,reduce二、ES6(ECMAScript2015)1.let和const2.箭头函数3.模板字符串4.解构赋值5.class和extends6.模块(import和export)......
  • JavaScript
    什么是JavaScript?JavaScript(简称:JS)是一门跨平台、面向对象的脚本语言(脚本语言是不需要编译,直接通过浏览器的解释就可以运行)。是用来控制网页行为的,它能使网页可交互。JavaScript和Java是完全不同的语言,不论是概念还是设计。但是基础语法类似。JavaScript在1......
  • JavaScript初学必备 之 初识ajax
    今日推荐歌曲:遇见一、ajax介绍1、学习前提需要有以下基础:HTML和CSS基础JavaScript基础2、什么是ajax?(1)、全称ajax===asyncJavascriptandxml(ajax===异步JavaScript和XML),ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。async:异步x......
  • C/C++语言基础--C++面向对象之继承、继承限制、多继承、拷贝继承等知识讲解
    本专栏目的更新C/C++的基础语法,包括C++的一些新特性前言通过前面几节课,我们学习了抽象、封装相关的概念,接下来我们将讲解继承;C语言后面也会继续更新知识点,如内联汇编;本人现在正在写一个C语言的图书管理系统,1000多行代码,包含之前所学的所有知识点,包括链表和顺序表等数据......
  • 【Kotlin 集合概述】可变参数vararg、中缀函数infix以及解构声明(二十)
    导读大纲1.1使用集合:vararg、infix调用和解构声明1.1.1扩展Java集合API1.1.2vararg:接受任意数量参数的函数1.1.3处理pairs:Infix调用和解构声明1.1使用集合:vararg、infix调用和解构声明本节将介绍Kotlin标准库中用于处理集合的一些函数同时......
  • JavaScript深拷贝与浅拷贝
    由于对象采用的是引用赋值。所以直接用“=”,修改属性的时候也会将原来的变量改变掉。因此,就有了浅拷贝与深拷贝用{...obj}和object.assign表示浅拷贝,其只拷贝外围对象的一层,而不会拷贝多层。 方法二:使用Object.assign  深拷贝的实现其一是通过递归实现拷贝。其二lod......
  • JavaScript 条件循环语句
    ‌条件循环语句‌是编程中的一种控制结构,它允许程序根据特定条件重复执行一段代码,直到满足某个条件为止。这种结构通常包括条件语句和循环语句,它们共同作用,使得程序能够根据预设的条件来决定是否继续执行循环体中的代码。for循环:适用场景:当知道循环次数时(循环次数已知)。特......
  • javascript 数组对象解构
    传统的写法不好记忆,书写麻烦,此时可以使用结构赋值的方法让代码更加简洁。数组结构是将数组中的单元值快速批量赋值给一系列变量的简介语法。变量的顺序对应数组单元值位置一次进行赋值操作。如下:应用一:交换两个变量Js前面有那种情况需要加分号。(不加分号解析器认为和上......
  • Javascript编译原理
    JavaScript的编译原理是一个复杂但有序的过程,主要涉及分词(词法分析)、解析(语法分析)、代码生成以及执行等阶段。以下是对JavaScript编译原理的详细解析:chrome编译流程 1.分词(词法分析)分词(Tokenizing)或词法分析(Lexing)是编译过程的第一步。在这个阶段,编译器将输入的源代码......
  • Javascript 一题搞懂 var 变量提升 & 函数声明提升!
    前置知识:在JavaScript中,“变量提升”(Hoisting)是指在代码执行之前,变量和函数声明会被提升到其所在作用域的顶部。对于使用var关键字声明的变量,会发生变量提升现象。一、声明提升1.变量声明提升:无论var变量在代码中的何处声明,它都会被提升到其所在的函数作用域......