### 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
```