天天看點

前端筆記之——typeof 和 instanceof

首先說一下JS的六大基本資料類型:undefined null boolean number string object(Array也是對象)。

當然 ES6 标準又新添了一個類型:Symbols,這裡不談。

對于undefined boolean number string 這四種類型的判斷,都可以使用 typeof 解決,如下

    var a;
    console.log(typeof a);   //undefined

    var a = true;
    console.log(typeof a);   //boolean

    var a = 119;
    console.log(typeof a);   //number
    
    var a = "Jams";
    console.log(typeof a);   //string
           
前端筆記之——typeof 和 instanceof

可以看到,使用 typeof 能夠有效的判斷出這四種資料類型

并且 typeof 還可以判斷 function 函數類型,如自定義函數 或者 Date,eval 等已定義好的函數.

var a = function(){};     
    console.log(typeof a);      //function
    console.log(typeof Date);   //function
    console.log(typeof eval);   //function
           
前端筆記之——typeof 和 instanceof

而對于null object 還有數組對象就無法精确判斷,隻能顯示object

    var a = null;
    console.log(typeof(a));   //object
    var a = document;
    console.log(typeof a);    //object
    var a = ['string','number','NaN']   
    console.log(typeof a);    //object
           

對于 null、document 我們可以使用 === 判斷,既判斷類型又判斷内容

var a = null;
    console.log(a === null);

    var a = document;
    console.log(a === document);    
           
前端筆記之——typeof 和 instanceof

那我們應該如何去精确判斷數組對象類型呢?

接下來就輪到 instanceof 登場了!

instanceof 文法:b instanceof A

instanceof 解釋:判斷 b 是否是 A 的執行個體或者 A 的子類的執行個體

    var a = ['string','number','NaN']   
    console.log(a instanceof Array);    
           

a 是 Array 的執行個體,故結果為 true.

再舉個例子:

function Foo(){}

    var f1 = new Foo();

    console.log(f1 instanceof Foo);

    console.log(f1 instanceof Object);
           

 結果是 true  true.

Object是所有對象的基類。

轉載請注明出處。