[JavaScript] typeof 和 instanceof:判斷型別與判斷實例

itsems
itsems_frontend
Published in
Nov 8, 2020
Photo by Louis Hansel @shotsoflouis on Unsplash
Outline:
+ typeof
+ instanceof

在處理資料的時候,typeof 是一個很常用的小工具,而 instaceof 常常會和他一起討論,接下來就看看 typeof 和 instanceof 可以幫助到我們什麼,和差異在哪裡。

typeof

typeof 可以告訴我們參數是什麼型別,就這麼單純。

藍字是 "string” console 的結果

數字、物件,都可以以 typeof 判斷出型別:

這邊比較特別的是,如果是陣列,typeof 一樣會顯示為物件:

為什麼?

這要提到另外一個觀念,這邊簡單的說明就好,Javascript 定義了資料型別分為基本型別物件型別兩種,基本型別包含了布林值、NULL、字串 …等六種,除了這六種基本型別 (Primitive type) 以外,都算是物件型別,陣列就是物件型別

想知道更多關於基本型別和物件型別,以及他們在 Javascript 上會有的行為差異可以看這裡:[JavaScript] Javascript中的傳值 by value 與傳址 by reference

所以結果才會是 object,那應該怎麼辦?

如果你想要試著判斷出參數是否為陣列,有以下幾種方式:

Array.isArray(myArr);
Object.prototype.toString.call(myArr);

並 MDN 這邊列出了 typeof 會回傳的清單:

所以從上面的表格中,我們可以再看到 typeof 會回傳奇怪的內容的型別:Null,Null 會回傳 Object?這是一個 Javascript 的 bug,就只是一個一直沒有修的 bug。

instanceof

A instance of B 可以用來判斷 A 是否為 B 的實例,在這邊先不詳述原型鍊的觀念,簡單說會告訴我 B 是否在 A 的原型鍊上:

從這個範例中,可以看到 e 指向了 Person,所以 e 屬於 Persone 的實例,回傳 true。

ref:
JavaScript 全攻略:克服 JS 的奇怪部分
MDN-typeof

內容若有任何錯誤,歡迎留言交流指教!🦦

--

--

itsems
itsems_frontend

Stay Close to Anything that Makes You Glad You are Alive.