typeof 與 instanceof之間的區別

JS中會使用typeof 和 instanceof來判斷一個變量是否爲空或者是什麼類型的。數組

ES6規範中有7種數據類型,分別是基本類型和引用類型兩大類函數

基本類型(簡單類型、原始類型):String、Number、Boolean、Null、Undefined、Symbolcode

引用類型(複雜類型):Object(對象、Function、Array)對象

一、typeof返回結果是該類型的字符串形式表示【6】(number、string、undefined、boolean、function、object)blog

注意字符串

  • typeof對於原始類型來講,除了null均可以顯示正確類型
  • typeof對於對象來講,除了函數都會顯示object

二、instanceof是用來判斷 A 是否爲 B 的實例,表達式爲:A instanceof B,若是 A 是 B 的實例,則返回 true,不然返回 false。 在這裏須要特別注意的是:instanceof 檢測的是原型。 原型

例子string

[] 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????io

 

        instanceof 只能用來判斷兩個對象是否屬於實例關係, 而不能判斷一個對象實例具體屬於哪一種類型。function

       以後增長了Array.isArray()方法判斷這個值是否是數組的。

總結一下:

一、typeof可以檢測出了null以外的原型類型(String、Number、Boolean、Undefined),對於對象類型能判斷出function、其餘的都爲Object

二、判斷一個值是否爲數組,使用Array.isArray()

三、若是須要判斷一個值是否爲null,最直接就是與null比較

value === null;    //true or false

 注意這裏須要三等號操做符「===」,由於三等號操做符在進行比較的時候不會將變量強制轉換爲另外一種類型。

因而可知,不管是typeof仍是instanceof都不能準確判斷出正確的類型。

相關文章
相關標籤/搜索