A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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


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

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); // 

  • == 两个等号进行比较时会进行隐式转换,将类型也转换为相同
  • === 判断类型和值是否相等
  • js中有6个值为(0 、’’ 、null、undefined、fals、NaN) 为false
  • 其他包括({} 、[] 、Infinity)都是true
[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); //张三

  • 此处是将b对象复制给c对象,同时是将b的标识符和引用地址都复制了一份给c对象,这个时候,b对象和c对象的引用地址指向的是同一个堆内存对象,所以当给c对象添加了一个属性时,b对象所指向的堆内存对象也拥有了name属性
  • 具体如图所示

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

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






0 个回复

您需要登录后才可以回帖 登录 | 加入黑马