对象的拷贝(深拷贝和浅拷贝)

1.复制运算符 = 实现的是浅拷贝,是拷贝对象的引用值。
2.javaScript 中数组和对象自带的拷贝方法都是“首层深拷贝”
3.JSON.stringify 实现的是深拷贝,但对目标对象有要求(非 undefined ,function,symbol);
4.想真正意义上深拷贝,只能用递归方法实现深层次的拷贝。

浅拷贝是只复制对象的引用(指针),而未复制真正的值,所以拷贝对象发生变化,原对象也会发生对象。
深拷贝就是对目标的完全拷贝,不像浅拷贝那样只是复制了一层引用,就连值也都复制了,深拷贝之后的对象不会对原对象有任何影响,其实就相当于拷贝后的对象是一个完全独立的对象。

浅拷贝经常用的就是通过=赋值实现
深拷贝目前就只有两种方法
1.通过JSON对象的parse 和stringify方法
2.利用递归每层都重新创建新的对象

简单类型 undefined Null Boolean Number string 以及对象变量的指针是存入的栈内存中可直接引用,
栈内存主要用于存储各种基本类型的变量,包括Boolean、Number、String、Undefined、Null,symbol以及对象变量的指针
object array 则是存入堆内存中,指针存到栈内存中用来引用。
堆内存主要负责像对象Object这种变量类型的存储

一般来说栈内存线性有序存储,容量小,系统分配效率高。而堆内存首先要在堆内存新分配存储区域,之后又要把指针存储到栈内存中,效率相对就要低一些了。
垃圾回收方面,栈内存变量基本上用完就回收了,而堆内存中的变量因为存在很多不确定的引用,只有当所有调用的变量全部销毁之后才能回收。

JavaScript中的拷贝方法:
1.concat 只是对数组的第一层进行深拷贝。
2.slice 只是对数组的第一层进行深拷贝。
3.Object.assign() 拷贝的是属性值
4… 实现的是对象第一层的深拷贝。
javaScript 中数组和对象自带的拷贝方法都是“首层深拷贝”

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值