### JS数据类型
总共七种语言类型:Undefined String Number Boolean Symbol Null Object
每一种语言都广泛应用于:变量值 函数参数 函数返回值 运算结果等
基本数据类型:string number boolean symbol null undefined
复杂数据类型:object array function
### 基本数据类型和复杂数据类型的区别
1. 操作方式不同
2. 存储方式不同:栈(存取快,内存小)、堆(存取慢、内存大)
### JS判断数据类型
判断基本类型:typeof 除了null返回 "object",其余类型返回均正确
判断复杂类型:instanceof 判断元素是否是对象的实例
### null和undefined的区别
1. null表示“没有对象”,即此处不应该有值
2. undefined表示此处应该有值,但是还没有定义
### 对象的概念:重要
1. 一切引用类型都是对象(array function object),对象是属性的集合
2. 函数是对象 数组是对象 对象是对象
### 对象都是通过函数创建的
1. let obj = { a: 1 } => let obj = new Object() obj.a = 1
2. let arr = [ 1 ] => let arr = new Array() arr[0] = 1
3. typeof Object || typeof Array => 'function'
### 函数原型
1. 函数都有一个默认的属性 prototype,这个函数的值是一个对象,这个对象中默认都有一个 constructor
属性指向这个函数本身
2. new Object(),Object函数是JS内置函数,除了 constructor 属性,还默认增加了其它的属性,它们的值都是函数
3. 在自定义构造函数中,我们经常会见到 Fn.prototype = { constuctor: Fn } 是因为我们覆盖了原型对象,所以需要
重新指定
4. 每一个对象都有一个隐式原型 __proto__ === Fn.prototype,这个属性指向创建该对象的函数的原型(prototype)
5. __proto__ 也是一个对象,Object.prototype.__proto__ === null
### 函数与变量的提升声明
```
console.log(obj); //function obj () {}
var obj \= {}
function obj () {}
console.log(obj);//obj
```