第一章 基础深入总结

1 数据类型

① 分类

原始类型/基础类型/值类型:
    String
    Number
    Boolean
    Null
    Undefined

对象类型/引用类型
    Object  基本对象
    Array
    Function
    .....

② 类型判断

typeof    
    两种形式:typeof函数,typeof运算符
    能判断: string、boolean、number、undefined、function
    不能判断: null和除了Function的对象类型

instanceof
    判断对象类型

==== 全等
    两个操作数,类型和值都要相等,不会自动类型转换,区分==
    判断 null和undefined

③ 相关问题

1. null和undefined的区别
    undefined 代表变量没有赋值
    null 代表变量赋值,只是值为null

2. 什么情况下数据类型是undefined
    ① 变量未赋值
    ② 函数的形参没有对应的实参
    ③ 函数没有返回值
    ④ 使用对象中不存在的属性

3. 什么情况下给变量赋值为null
    ① 定义变量,暂时不需要设置其他值,先设置为null
    ② 定义对象的某个属性,暂时不需要值
    ③ 如果一个不使用的对象,设置为null,对象会变为垃圾对象,被回收。

2 数据、变量和内存

① 什么是数据?

* 存储于内存中代表特定信息的'东东', 本质就是0101二进制
* 具有可读和可传递的基本特性
* 万物(一切)皆数据, 函数也是数据
* 程序中所有操作的目标: 数据

② 什么是变量?

变量就是可变的量
变量就是一小块内存的标识,里面存的数据

③ 什么是内存?

* 内存条通电后产生的存储空间(临时的)
* 产生和死亡: 内存条(集成电路板)==>通电==>产生一定容量的存储空间==>存储各种数据==>断电==>内存全部消失
* 内存的空间是临时的, 而硬盘的空间是持久的
* 一块内存包含2个数据
  * 内部存储的数据(一般数据/地址数据)
  * 内存地址值数据
* 内存分类
  * 栈: 全局变量, 局部变量 (空间较小)
  * 堆: 对象 (空间较大)

④ 数据、变量、内存之间的关系

内存是一块存储空间,里面存数据
变量是对象这块内存标识,通过变量名可以找到这块内存,从而获取数据

⑤ 相关问题

var a = xxx, a内存中到底保存的是什么?
    xxx是基本类型/原始类型
    xxx是对象类型
    xxx是变量
var a = 100;
//在栈里面把100这个值存下来

var a = new Date();
// 堆中开辟控件,存储对象;  栈存地址

var b = a;
// a变量的栈存的是什么, b就复制一份

3 垃圾回收机制 Garbage Collection

① 什么是垃圾?

  • 一个对象没有被引用,就是垃圾对象。

② 垃圾回收

  • 清空垃圾对象,释放内存。

  • JavaScript/Java/Python等: 自动垃圾回收

  • C/C++: 手动回收

③ 内存泄漏

  • 垃圾对象没有被清除,导致内存空间被占用

  • 内存空间越占越多,导致程序卡顿甚至死机

④ 垃圾回收的算法(机制)

  • 引用计数 (IE9以及以下)

  • 标记清除 (除了IE和新的IE)

⑤ 引用计数

- ① 对象有个引用标记
- ② 如果对对象进行了引用 +1
- ③ 取消了对象对象的引用 -1
- ④ 当引用标记=0的时候,变为垃圾对象,并删除
- 优点: 及时清除垃圾对象
- 缺点: 互相引用的对象导致内存泄漏

⑥ 标记清除

- 标记阶段:从根对象出发,每一个可以从根对象访问到的对象都会被添加一个标记,于是这个对象就被标识为可到达对象。
- 清除阶段:垃圾回收器,会对内存从头到尾进行线性遍历,如果发现有对象没有被标记为可到达对象,那么就将此对象占用的内存回收。
                  并且将原来标记为可到达对象的标识清除,以便进行下一次垃圾回收操作。
- 优点:  不会内存泄漏
- 缺点:  深度递归变量,定时的标记定时取清除

results matching ""

    No results matching ""