首先看一段很有意思的代码,如下:
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只不过是地址而已,所以引用类型赋值只不过是赋地址罢了,两者公用一个对象,所以才会出现文章一开始的问题。而基本类型则不一样,传递的就是值,所以不会出现这种问题。