js基本数据类型及引用类型(数据存储类型)解析

上面是自己画的思维导图,希望可以有一点参考。

解析:

一、基本类型:
number , string ,boolean,null ,undefined ,放在栈,栈内存是自动分配内存的。
①基本类型比较是值的比较。
②基本类型是按值访问,可以直接得到变量值。

储存类型值类型。存的是值,赋值之后原变量值不能改。
注:任何方法都无法改变一个基本类型的值,也不可以添加属性和方法。

  let color = 'pink'
  color = 'purple'
  console.log(color) // 输出:purple

这样看,我们重新赋值,log出好像改变了,实际是指针改变。

如果重新赋值,指针指向新的栈空间,把新值放到新空间。之前的地址就是野房子,之前数据也不会销毁。

二、对象类型/引用类型:
Object ,Function ,Array ,Date等,放在堆,堆内存是动态分配内存的。如果被占用,不能释放,为减少内存消耗,fn=null,手动清除之前的引用。
①引用类型则是按引用访问。在访问引用类型的值时,先得到该值的地址,再通过该地址得到变量值。
②当一个对象赋值给另一个新对象时,用等号作比较就相等,因为引用(内存地址)相同。
附:==和===比的都是内存地址而不是结构。
举个栗子:两个不同的对象有相同的属性名和属性值,但用==和===仍不相等。因为比较的是引用,是内存地址。

存储类型:引用类型,存的是地址,值可以变,也可以添加属性和方法。

因为引用类型存的是地址,(当一个变量给另一个变量赋引用类型的值)赋值之后把原变量的引用地址赋给新变量。新变量改原来的也改变。也就是指针的赋值。任何操作会相互影响。

引用类型如果重新赋值,会在堆开辟新房间,指针指向新的堆地址。此时就不会互相影响。

最后附一下es6新增的数据类型:
symbol 和 bigInt
都是放在栈里的原始数据类型
symbol 代表创建后独一无二且不可变的数据类型,为了解决变量命名的冲突问题 
bigInt 是一种数字类型的数据,标识任意精度格式的整数,安全地存储和操作大整数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值