首页 > 其他分享 >js之深拷贝与浅拷贝

js之深拷贝与浅拷贝

时间:2022-08-30 11:58:50浏览次数:74  
标签:obj2 name 对象 age js 之深 hobby 拷贝

一、深拷贝与浅拷贝

  • 什么是深拷贝

    深拷贝是将一个对象从内存中完整的拷贝一份出来,从堆内存中开辟一个新的区域存放新对象(新旧对象不共享同一块内存),且修改新对象不会影响原对象(深拷贝采用了在堆内存中申请新的空间来存储数据,这样每个可以避免指针悬挂
  • 什么是浅拷贝

    如果属性是基本类型,拷贝的就是基本类型的值。如果属性是引用类型,那么拷贝的就是内存地址(新旧对象共享同一块内存),所以如果其中一个对象改变了这个地址,就会影响到另一个对象(只是拷贝了指针,使得两个指针指向同一个地址

二、赋值与浅拷贝的区别

  • 把一个对象赋值给一个新的变量的时候,赋的其实是该对象在栈中的地址,而不是栈中的数据。也就是这两个对象指的是同一个储存空间,不论哪个对象发生改变,其实都是改变储存空间里的内容。因此,两个对象是联动的。

  • 浅拷贝是按位拷贝对象的,他会创建一个新的对象,这个对象有着原始对象属性值的一份精确拷贝。
    如果属性是基本类型,拷贝的就是基本类型的值。
    如果属性是内存地址(引用类型),拷贝的就是内存地址,因此如果一个对象改变了这个地址,就会影响到另一个对象。
    即默认拷贝构造函数只是对对象进行浅拷贝复制(逐个成员依次拷贝),即只复制对象空间而不复制资源。

  • 赋值与浅拷贝举例

      对象赋值:
    
      let obj1 = {
    	name:'chen',
    	age: 26,
    	hobby:['baskitball','swim','run','eat']
      }
      let obj2 = obj1
      obj2.name = 'zi'
      obj2.age = 100
      obj2.hobby[0] = 'play games'
      console.log(obj1) // {"name":"zi","age":100,"hobby":["play games","swim","run","eat"]}
      console.log(obj2) // {"name":"zi","age":100,"hobby":["play games","swim","run","eat"]}
    

标签:obj2,name,对象,age,js,之深,hobby,拷贝
From: https://www.cnblogs.com/chenzilong/p/16638722.html

相关文章

  • 关于vue.js:vue使用sass中deep报错
    转自:https://lequ7.com/guan-yu-vuejsvue-shi-yong-sass-zhong-deep-bao-cuo.html之前装了一个vue3.0的环境,结果搬砖的时候发现vue2.0的项目跑不了了然后照着网上说......
  • 将获取的['json字段'] 转为csv 文件 - 数据转格式化处理
    用到的函数:1、eval():eval()函数常被称为评估函数,它的功能是去掉参数最外侧引号,变成python可执行的语句,并执行语句的函数。2、isinstance():isinstance()函数来判断一......
  • MySQL中JSON使用
    在使用数据库存储数据时,经常会用到json方式;比如产品的各种属性,这时候又不能确定每一样产品有多少属性,因此直接存json可以避免扩展数据库字段,使之更为灵活.MySQL自5.......
  • JS 串口 16进制数据累加和取低位
    JS串口16进制数据累加和取低位,16进制字符串所有字节加起来,再取余functioncheckEnd(str){letitotal=0,len=str.length,num=0;while(num<le......
  • js实现层序遍历
    /***Definitionforabinarytreenode.*functionTreeNode(val,left,right){*this.val=(val===undefined?0:val)*this.left=(left===un......
  • JS 多个 if 判断丝滑
    多个if判断,看着很乱,使用优雅的代码实现一个判断if(fruit=='apple'){console.log('red');}俩个判断if(fruit=='apple'||fruit=='strawberry')......
  • js 实现二叉树中序遍历
    varinorderTraversal=function(root){//迭代if(!root){return[];}letres=[];letstack=[];while(stack.length>......
  • js Linked List Generator All In One
    jsLinkedListGeneratorAllInOnejs链表生成器classListNode{constructor(val,next){this.val=(val===undefined?0:val)this.next=(nex......
  • js 实现解析和构造Url参数
    //解析获取的url中的参数为对象functionparseQueryString(url){if(!url){return{};}constqsArr=decodeURIComponent(url).split("?"......
  • 数据传输格式XML和JSON
    XML:可扩展标记语言格式臃肿,解析麻烦,需要用到第三库 JSON:JavaScript对象表示法都是字符串,解析简单 JSON可支持的数据类型只有六种数值、字符串、布尔值、null、对......