这篇文章主要讲解了“JS引用数据类型的区别有什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS引用数据类型的区别有什么”吧!
stack为自动分配的内存空间,它由系统自动释放;而heap则是动态分配的内存,大小也不一定会自动释放
JS分两种数据类型:
基本数据类型:Number、String、Boolean、Null、Undefined、Symbol,这些类型可以直接操作保存在变量中的实际值。
引用数据类型:Object
基本数据类型是指存放在栈中的简单数据段,数据大小确定,内存空间大小可以分配,它们是直接按值存放的,所以可以直接按值访问
vara=10;
varb=a;
b=20;
console.log;//10值
console.log;//20值
引用类型是存放在堆内存中的对象,变量其实是保存的在栈内存中的一个指针,这个指针指向堆内存。
引用类型数据在栈内存中保存的实际上是对象在堆内存中的引用地址。通过这个引用地址可以快速查找到保存中堆内存中的对象
varobj1=newObject();varobj2=obj1;obj2.name="我有名字了";console.log;//我有名字了
说明这两个引用数据类型指向了同一个堆内存对象。obj1赋值给obj2,实际上这个堆内存对象在栈内存的引用地址复制了一份给了obj2,但是实际上他们共同指向了同一个堆内存对象,所以修改obj2其实就是修改那个对象,所以通过obj1访问也能访问的到。
vara=;
varb=a;//传址,对象中传给变量的数据是引用类型的,会存储在堆中;
varc=a;//传值,把对象中的属性/数组中的数组项赋值给变量,这时变量C是基本数据类型,存储在栈内存中;改变栈中的数据不会影响堆中的数据
alert;//1,2,3,4,5
alert;//1
//改变数值
b=6;
c=7;
alert;//6
alert;//1
从上面我们可以得知,当我改变b中的数据时,a中数据也发生了变化;但是当我改变c的数据值时,a却没有发生改变。
这就是传值与传址的区别。因为a是数组,属于引用类型,所以它赋予给b的时候传的是栈中的地址,而不是堆内存中的对象。而c仅仅是从a堆内存中获取的一个数据值,并保存在栈中。所以b修改的时候,会根据地址回到a堆中修改,c则直接在栈中修改,并且不能指向a堆内存中。
感谢各位的阅读,以上就是“JS引用数据类型的区别有什么”的内容了,经过本文的学习后,相信大家对JS引用数据类型的区别有什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。