JS裡檢測資料型別4種方法

2021-10-23 22:49:22 字數 3429 閱讀 9336

第一種

1.typeof

1 console.log(typeof "");

2 console.log(typeof 1);

3 console.log(typeof true);

4 console.log(typeof null);

5 console.log(typeof undefined);

6 console.log(typeof );

7 console.log(typeof function(){});

8 console.log(typeof {});

看看控制台輸出什麼

可以看到,typeof對於基本資料型別判斷是沒有問題的,但是遇到引用資料型別(如:array)是不起作用的。

第二種2.instanceof

1 console.log("1" instanceof string);

2 console.log(1 instanceof number);

3 console.log(true instanceof boolean);

4 // console.log(null instanceof null);

5 // console.log(undefined instanceof undefined);

6 console.log( instanceof array);

7 console.log(function(){} instanceof function);

8 console.log({} instanceof object);

暫且不考慮null和undefined(這兩個比較特殊),看看控制台輸出什麼

可以看到前三個都是以物件字面量建立的基本資料型別,但。是卻不是所屬類的例項,這個就有點怪了。後面三個是引用資料型別,可以得到正確的結果。如果我們通過new關鍵字去建立基本資料型別,你會發現,這時就會輸出true,如下:

接下再來說說為什麼null和undefined為什麼比較特殊,實際上按理來說,null的所屬類就是null,undefined就是undefined,但事實並非如此:控制台輸出如下結果:

瀏覽器壓根不認識這兩貨,直接報錯。在第乙個例子你可能已經發現了,typeof null的結果是object,typeof undefined的結果是undefined

尤其是null,其實這是js設計的乙個敗筆,早期準備更改null的型別為null,由於當時已經有大量**使用了null,如果更改,將導致很多**的邏輯出現漏洞問題,就沒有更改過來,於是一直遺留到現在。作為學習者,我們只需要記住就好。

第三種:

(這裡依然拋開null和undefined)乍一看,constructor似乎完全可以應對基本資料型別和引用資料型別,都能檢測出資料型別,事實上並不是如此,來看看為什麼:

我宣告了乙個建構函式,並且把他的原型指向了array的原型,所以這種情況下,constructor也顯得力不從心了。

看到這裡,是不是覺得絕望了。沒關係,終極解決辦法就是第四種辦法,看過jquery原始碼的人都知道,jquery實際上就是採用這個方法進行資料型別檢測的。

第四種:

可以看到,所有的資料型別,這個辦法都可以判斷出來。那就有人質疑了,假如我把他的原型改動一下呢?如你所願,我們看一下:

如果用這種方法來進行判斷,可以如下這麼寫

let str = 'test';

let types = object.prototype.tostring;

if(types.call(str)==="[object string]")

可以看到,依然可以得到正確的結果。好了,今天就說到這裡,歡迎關注我的部落格,一起交流學習前端知識。

JS判斷資料型別的4種方法

4種判斷方法分別是 可判斷的型別對比如下圖 建構函式名方法 function getconstructorname data 物件原型方法 不能判斷自定義函式物件型別 function getprototypename data 自定義的建構函式 function func var newobj n...

JS中檢測資料型別的多種方法

面試當中經常會問到檢測 js 的資料型別,我在工作當中也會用到這些方法。讓我們一起走起!首先給大家上乙個案例 1 console.log typeof langshen string 2 console.log typeof 666 number 3 console.log typeof true ...

js 資料型別 js中檢測資料型別的方法彙總

回顧一下js中資料型別分為兩大類,基礎型別和引用資料型別,主要有 基本資料型別 複雜資料型別 檢測js中的資料型別常用的方法有 typeof instanceof object.prototype.tostring 對比一下這三種方法的優缺點 typeof 5 number 有效typeof dsd...