# 数据类型的分类和判断
* 基本(值)类型
* Number ----- 任意数值 -------- typeof
* String ----- 任意字符串 ------ typeof
* Boolean ---- true/false ----- typeof
* undefined --- undefined ----- typeof/===
* null -------- null ---------- ===
* 对象(引用)类型
* Object ----- typeof/instanceof
* Array ------ instanceof
* Function ---- typeof
*判断
* typeof:
* 可以区别: 数值, 字符串, 布尔值, undefined, function
* 不能区别: null与对象, 一般对象与数组
* instanceof
* 专门用来判断对象数据的类型: Object, Array与Function
* ===
* 可以判断: undefined和null
1. undefined与null的区别?
* undefined代表没有赋值
* null代表赋值了, 只是值为null
2. 什么时候给变量赋值为null呢?
* var a = null //a将指向一个对象, 但对象此时还没有确定
* a = null //让a指向的对象成为垃圾对象
3. 严格区别变量类型与数据类型?
* js的变量本身是没有类型的, 变量的类型实际上是变量内存中数据的类型
* 变量类型:
* 基本类型: 保存基本类型数据的变量
* 引用类型: 保存对象地址值的变量
* 数据对象
* 基本类型
* 对象类型
## 数据,变量, 内存的理解
* 什么是数据?
* 在内存中可读的, 可传递的保存了特定信息的'东东'
* 一切皆数据, 函数也是数据
* 在内存中的所有操作的目标: 数据
* 什么是变量?
* 在程序运行过程中它的值是允许改变的量
* 一个变量对应一块小内存, 它的值保存在此内存中
* 什么是内存?
* 内存条通电后产生的存储空间(临时的)
* 一块内存包含2个方面的数据
* 内部存储的数据
* 地址值数据
* 内存空间的分类
* 栈空间: 全局变量和局部变量
* 堆空间: 对象
* 内存,数据, 变量三者之间的关系
* 内存是容器, 用来存储不同数据
* 变量是内存的标识, 通过变量我们可以操作(读/写)内存中的数据
*关于引用变量赋值问题
* 2个引用变量指向同一个对象, 通过一个引用变量修改对象内部数据, 另一个引用变量也看得见
* 2个引用变量指向同一个对象,让一个引用变量指向另一个对象, 另一个引用变量还是指向原来的对象
*JS引擎如何管理内存?
1. 内存生命周期
1). 分配需要的内存
2). 使用分配到的内存
3). 不需要时将其释放/归还
2. 释放内存
* 为执行函数分配的栈空间内存: 函数执行完自动释放
* 存储对象的堆空间内存: 当内存没有引用指向时, 对象成为垃圾对象, 垃圾回收器后面就会回收释放此内存