浅谈js的深拷贝和浅拷贝,基本数据类型和引用数据类型,堆存储和栈存储的区别

一、js中基本数据类型和引用数据类型有那些,俩者有何区别

基本数据类型:string,number,boolean,null,undefined;

引用数据类型:array,object,function;

要理解基本数据类型和引用数据类型的区别,必须先明白堆(heap)存储和栈(stack)存储的区别:
栈(stack)存储会自动的分配内存空间,由系统自动释放;
堆(heap)存储会动态分配内存空间,大小不确定;
基本数据类型和引用数据类型的区别:
基本数据类型在栈(stack)中直接存值,有确定的数据大小和内存空间大小;
引用数据类型在栈中存放的是指针,通过指针去堆(heap)中查找相应的值,数据大小和内存空间大小是不固定的;

深拷贝和浅拷贝的区别:

浅拷贝:引用数据类型在复制过程中,是复制了栈中存放的指针地址,所以在更改堆中的内容时,所有引用该内存的指针都会发生改变;

深拷贝:增加了一个指向指针并且开闭了一个新的内存空间去存储复制后的内容;

常见的深拷贝的方法:

JSON.stringify():把一个对象序列化成一个json字符串,并且保存到磁盘上,在通过JSON.parse()反序列化成一个新的对象;

局限性:对象中存在function,symbol,undefined,序列化后键值对会消失;针对于对象的原型链和不可拷贝的属性无法复制;拷贝Date引用类型会变成字符串;拷贝RegExp引用类型会变成空对象;对象中的NaN,Infinity,-Infinity序列化后会变成null;无法拷贝循环引用;

!!!有问题望指出,共同进步;

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值