typeof 與 instanceof之間的區別
JS中會使用typeof 和 instanceof來判斷一個變量是否為空或者是什麽類型的。
ES6規範中有7種數據類型,分別是基本類型和引用類型兩大類
基本類型(簡單類型、原始類型):String、Number、Boolean、Null、Undefined、Symbol
引用類型(復雜類型):Object(對象、Function、Array)
1、typeof返回結果是該類型的字符串形式表示【6】(number、string、undefined、boolean、function、object)
註意
- typeof對於原始類型來說,除了null都可以顯示正確類型
- typeof對於對象來說,除了函數都會顯示object
2、instanceof是用來判斷 A 是否為 B 的實例,表達式為:A instanceof B,如果 A 是 B 的實例,則返回 true,否則返回 false。 在這裏需要特別註意的是:instanceof 檢測的是原型。
例子
[] instanceof Array; //true {} instanceof Object;//true new Date() instanceof Date;//true function Person(){}; new Person() instanceof Person; [] instanceof Object; //true new Date() instanceof Object;//true new Person instanceof Object;//true
但是instanceof可以判斷出[]是Array的實例,同時也認為是Object的實例,Why????
instanceof 只能用來判斷兩個對象是否屬於實例關系, 而不能判斷一個對象實例具體屬於哪種類型。
之後增加了Array.isArray()方法判斷這個值是不是數組的。
總結一下:
1、typeof能夠檢測出了null之外的原型類型(String、Number、Boolean、Undefined),對於對象類型能判斷出function、其他的都為Object
2、判斷一個值是否為數組,使用Array.isArray()
3、如果需要判斷一個值是否為null,最直接就是與null比較
value === null; //true or false
註意這裏需要三等號操作符“===”,因為三等號操作符在進行比較的時候不會將變量強制轉換為另一種類型。
由此可見,無論是typeof還是instanceof都不能準確判斷出正確的類型。
typeof 與 instanceof之間的區別