js中基本数据类型和引用数据类型的区别

1.栈和堆

栈是自动分配的内存空间,它由系统对象自动释放,而堆则是动态分配的内存,大小也不一定会自动释放。

2.数据类型

  • 基本数据类型:null undefined string number boolean symbol
  • 引用数据类型:object(对象)

3.基本数据类型(存放在栈中)

1.基本数据类型存放在栈中,访问的时候是按进行访问的,基本类型的值是不可变的

     var a = 10;
        var b = a;
        b = 20;
        console.log(a);//10
        console.log(b);//20
       

image

2.基本类型的比较是它们的值的比较

  var c = 1;
        var d = true;
        console.log(Boolean(1));//true
        console.log(c == d); // true
        console.log(c === d); // 
  • == 两个等号进行比较时会进行隐式转换,将类型也转换为相同
  • === 判断类型和值是否相等
  • js中有6个值为(0 、’’ 、null、undefined、fals、NaN) 为false
  • 其他包括({} 、[] 、Infinity)都是true
        console.log(Boolean(0)); //false
        console.log(Boolean('')); //false
        console.log(Boolean(null)); //false
        console.log(Boolean(NaN)); //false
        console.log(Boolean(undefined)); //false
        console.log(Boolean(false)); //false
        console.log(Boolean({})); //true
        console.log(Boolean([])); //true
        console.log(Boolean(Infinity)); //true

4.引用类型

1.引用类型的值按引用访问的,引用类型的值是可变的

         var obj = {
            name: 'zyj'
        };
        obj.name = 'bbbb';
        obj.age = 20;
        console.log(obj.name); //bbbb
        var b = {};
        var c = b;
        c.name = '张三';
        console.log(b.name); //张三
        console.log(c.name); //张三
  • 此处是将b对象复制给c对象,同时是将b的标识符和引用地址都复制了一份给c对象,这个时候,b对象和c对象的引用地址指向的是同一个堆内存对象,所以当给c对象添加了一个属性时,b对象所指向的堆内存对象也拥有了name属性
  • 具体如图所示
    在这里插入图片描述

2.引用类型的值的比较是引用的比较

    var a = {};
    var b = {};
    console.log(a == b); //false
    console.log(a === b); //false
  • 虽然此处两个都是空对象,但是进行比较的时候得到的结果却是不相等,这是因为引用类型的值在内存中是这样存储的,在栈中存放标识符(即a、b)和引用地址(指针),在堆中存放对象,通过栈中的的指针(引用地址)可以找到存在堆内存中的对象。
  • 上面例子中,因为两个对象的引用地址分别存在不同的栈内存中,同时指向的也是不同的堆内存中的对象,所以无论是松散相等还是严格相等去判断这个两个空对象,它们都是不相等的。
    如下图所示
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值