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都不能准確判斷出正確的類型。
