JS 基本数据类型和引用数据类型

基本数据类型有number、string、boolean、undefined、null,值是不可变的,存放在栈内存当中,es6又引入了BigInt(大整数)和Symbol

引用数据类型有object、function、array,值是可变的,存放在堆内存,通过栈内存的指针指向

堆内存和栈内存就像一个个的小房子,每个房子都有自己的编号,存取东西的时候直接按照编号来

基本数据类型

1、当创建两个变量时,栈内存中就会保存这两个值

//基本数据类型的引用赋值不会改变原始值
var a = 1;
var b = a;
console.log(a,b)//1,1

2、当改变a的值的时候,b的值并不会受影响,因为改变的只是a房间的值。实际上并不是改变了a的值,而是重新给a分配了一个房间,原来的值仍然在,只是没有联系了,原来存放a值的房间号码还原,但值还在。

//基本数据类型的引用赋值不会改变原始值
var a = 1;
var b = a;
console.log(a,b)//1,1
a=2;
console.log(a,b)//2,1

引用数据类型

1、当创建两个数组时,因为是引用数据类型,堆内存中就会保存这两个值,并且arr和arr1都指向同一个堆内存的地址

//引用数据类型的值是可变的
var arr = [1,2];
var arr1 = arr;
console.log(a,b)//[1,2],[1,2]

2、当push一个值进arr里面时,arr和arr1的值都会发生改变,都会增加一个3,因为它们指向的是同一个地址

//引用数据类型的值是可变的
var arr = [1,2];
var arr1 = arr;
console.log(a,b)//[1,2],[1,2]
arr.push(3);
console.log(arr ,arr1 )//[1,2,3],[1,2,3]

3、当重新给arr赋值时,arr的引用地址会发生改变,arr1不会(js执行顺序的问题,在此之前arr1已经指向了堆内存1001)

//引用数据类型的值是可变的
var arr = [1,2];
var arr1 = arr;
console.log(a,b)//[1,2],[1,2]
arr = [1,2,3];
console.log(arr ,arr1 )//[1,2,3],[1,2]

    第二步是操作数组arr,那么堆内存里面的值会发生改变,第三步是重新给arr赋值,它指向堆内存的地址发生了变化

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值