js基础类型和引用类型

JavaScript的基本规则是:基本数据类型通过传值来操作,而引用类型则通过传址来操作。

数字和布尔 类型在JavaScript中都是基本类型,因为它们只是有一些很小的、固定数目的字节组成,这些字节很容易在JavaScript解释器的较底层操作。另一方面,对象是引用数据类型。数组和函数,是对象的特殊类型,因此也是引用类型。这些数据类型可以包含任意数目的属性或元素,因此他们不像向固定大小的基本数据类型值那样很容易地操作。既然对象和数组的值可能会变得恒大,那么,通过传值来操作这些类型也就没有什么意义,因为这样可能会牵扯到对大量内存低效率地复制和比较。

对于基本类型的值而言,其地址和具体内容都存在于栈内存中;而基于引用类型的值,其地址存在栈内存中,其具体内容存在堆内存中。

基本类型如果是全局的,也放在堆上。而且,位于引用类型内的基本类型,也是放在堆上??。

基本数据类型与引用数类型相比,其差别是基本数据类型保存在函数运行时的栈中,而引用数据类型的值保存在堆空间中。

在js中的变量分为基本类型和引用类型。基本类型就是保存在栈中的简单数据段,而引用类型就是那些保存在堆内存中的对象。

基本类型在内存中分别占用固定大小的空间,会自动释放。引用类型值大小不固定,栈内存中存放的地址指向堆内存中的对象,当查询引用类型的变量时先从从栈中读取地址,然后在通过地址找到堆中的值。

例如

var arr1 = [0 1 2 3];
var arr2 = arr1;
var str1 = arr2[2];
console.log(arr2);//0,1,2,3
console.log(str1);//2

arr2[4] = 4;
str1 = 5;
console.log(arr1);//0,1,2,3,4
console.log(arr1[2]);//2

上面例子可以看出,当修改arr2中数据时,arr1中的数据也发生了改变,而当修改str1的数据时,arr1中的数据没发生改变。

因为,arr1数组属于引用类型,所以他赋值给arr2时传的是栈中的地址,而不是堆内存中的对象。arr1 arr2都是指向同一块堆内存,当arr2修改堆内存时候也会影响到arr1。str1得到的是一个基本类型的值,所以str1仅仅是从arr1内存中获取了一个数值,保存于栈内存中。str1是直接在栈中修改,并不影响到arr1堆内存中的数据。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值