js的深浅拷贝原因

首先看一段很有意思的代码,如下:

var a=['a'];
var b=a;
a.push('b')
console.log(a);// 'a','b'
console.log(b);// 'a','b'

将a的值赋给b,改变a的值,b的值也改变了,中间到底出了什么鬼?

像知道其中的原因,首先需要了解一些js的基本知识。

1.js的变量包括基本类型和引用类型两种。

基本类型:number、string、boolean、null、undefined、symbol,都是我们平常写程序用到的,即使没用到也见过的。

引用类型:Object 只此一种。

2. js 变量的存储方式。

栈:自动分配内存空间,系统自动释放,里面存放的是基本类型的值和引用类型的地址

堆:动态分配的内存,大小不定,也不会自动释放。里面存放引用类型的值。

(此图为盗的网上的图,原博主看到不要骂的太狠啊)

 其实基本类型与引用类型最大的区别就是前者为传值,后者为传地址。

js不允许你操作内存,所以引用类型只不过是对象的内存地址,如var temp=[],temp只不过是地址而已,所以引用类型赋值只不过是赋地址罢了,两者公用一个对象,所以才会出现文章一开始的问题。而基本类型则不一样,传递的就是值,所以不会出现这种问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值