js数据类型基础

        最近投了几家公司面试,其中有一家公司面试官面试我非常感谢他,感觉他像一位老师的角色对于我回答不上来的问题以及回答错误的问题耐心指导。js基础真的很重要!!面完之后我觉平常我只是看到了问题的表面,并没有深度的了解。今天深入了解了一个小知识点,也分享给大家。有不对的地方,希望大家指出改正!

js数据类型主要分两类:

原始值:string,number,Boolean,undefined,null

引用值:object,array,function,date

        其中原始值属于栈数据,引用值属于堆数据。栈数据肯定就是跟我们数据结构学的先进先出是一样。我就举例子画图来让大家更直观的理解一下吧

var a = 100
var b = a
a = 200

前两句赋值数据都是存在栈中,下图所示分别从栈中申请了一个空间存放变量的值;

第三句修改变量a的值,其实不是在a变量上直接修改,而是把变量a覆盖了。之前申请的空间还在被占用,如下图所示

再举一个引用值的例子

var a = [1,2]
var b = a
a.push(3)

代码前两句话的意思就是,在栈中给a申请了一个空间,但是a的值是引用类型的,所以就在堆中给[1,2]申请了一个空间,然后a变量存的值是堆的地址值。 第二句话把a的值赋值给b,就相当于把a的值1001地址赋值给了b,所以ab指向同一个空间。so第三句话呢,给a数组中加入了3,ab两个变量的值都变为了[1,2,3]

另外一种情况

var a = [1,2]
var b = a
a = [1,3]

第三句给a赋值,相当于重新在堆中给[1,3]申请了一块空间,然后把此地址赋值给了a变量,所以此时a,b是两个不同的数组 

我感觉应该说的很清楚了,以后多多更新,希望可以跟大家共同进步!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值