基础类型和应用类型区别以及相关问题

先说定义

基础类型
es5中基础类型包括:number,string,null,undefined,Boolean。es6新增了一种基础类型symbol,基础类型的存储是存放在中,原因是基础类型存储的空间很小,存放在栈(stack)中方便查找,且不易于改变 。 基础类型的值存放在栈内存里数据不能修改,如果要修改一个值,会新建一个新值,不会修改原始值。(这里简单的说就是那些非多个值同时组合起来的类型)
引用类型
引用类型是指有多个值构成的对象,也就是对象类型比如:Object,Array,Function,Data funtion(函数也是)等,js的引用数据类型是存储在中(heap),也就是说存储的变量处的值是一个指针(point),指向存储对象的内存地址。存在堆中的原因是:引用值的大小会改变,所以不能放在栈中,否则会降低变量查询的速度 引用类型的值是可以修改的。(记住多个值就对了,还有函数也是哦,因为是多个值嘛。)

来点例子

			var obj5 = {a:3};
            var obj6 = obj5;
            obj5.a = 6;
            obj5 = {a:8}
            console.log(obj5.a);//8
            console.log(obj6.a);//6

这个例子中obj5.a是8,obj6.a是6。具体详解见下图的堆栈图。自己手动画的有点丑。
在这里插入图片描述
从上面的图中我们可以清晰的看到obj6因为是新建的原因,在站内存中新建了一个新的内存存储,那个obj5.a在原有的基础上的覆盖,所以会直接修改堆内存中的值。
这边给大家提供一个好理解的方法。
所谓引用类型的值改变是obj5.c是说的这种值,基础类型中的是一个单独的值,比如obj6这种就只能重新新建去修改值,即在比较的时候是不一样的是false

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值