黑马程序员技术交流社区

标题: 【成都校区】-- js中基本数据类型和引用数据类型的区别 [打印本页]

作者: 小刀葛小伦    时间: 2019-11-6 21:29
标题: 【成都校区】-- js中基本数据类型和引用数据类型的区别
1.栈和堆
栈是自动分配的内存空间,它由系统对象自动释放,而堆则是动态分配的内存,大小也不一定会自动释放。


2.数据类型

3.基本数据类型(存放在栈中)
1.基本数据类型存放在栈中,访问的时候是按进行访问的,基本类型的值是不可变的
[JavaScript] 纯文本查看 复制代码
 var a = 10;
        var b = a;
        b = 20;
        console.log(a);//10
        console.log(b);//20
      


2.基本类型的比较是它们的值的比较
[JavaScript] 纯文本查看 复制代码
 var c = 1;
        var d = true;
        console.log(Boolean(1));//true
        console.log(c == d); // true
        console.log(c === d); //

[JavaScript] 纯文本查看 复制代码
 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.引用类型的值按引用访问的,引用类型的值是可变的
[JavaScript] 纯文本查看 复制代码
 var obj = {
            name: 'zyj'
        };
        obj.name = 'bbbb';
        obj.age = 20;
        console.log(obj.name); //bbbb

[JavaScript] 纯文本查看 复制代码
    var b = {};
        var c = b;
        c.name = '张三';
        console.log(b.name); //张三
        console.log(c.name); //张三


2.引用类型的值的比较是引用的比较
[JavaScript] 纯文本查看 复制代码
 var a = {};
    var b = {};
    console.log(a == b); //false
    console.log(a === b); //false

虽然此处两个都是空对象,但是进行比较的时候得到的结果却是不相等,这是因为引用类型的值在内存中是这样存储的,在栈中存放标识符(即a、b)和引用地址(指针),在堆中存放对象,通过栈中的的指针(引用地址)可以找到存在堆内存中的对象。
上面例子中,因为两个对象的引用地址分别存在不同的栈内存中,同时指向的也是不同的堆内存中的对象,所以无论是松散相等还是严格相等去判断这个两个空对象,它们都是不相等的。
如下图所示











欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2