日常的開發中,我們經常會遇到判斷一個變量的資料類型或者該變量是否為空值的情況,你是如何去選擇判斷類型的操作符的?本文來總結記錄一下我們開發人員必須掌握的關于 typeof 和 instanceof 的知識點以及在開發中的使用建議,同時在面試過程中也經常會遇到這樣的問題。
typeof 操作符,确定任意變量的資料類型,确切說,它是判斷一個變量是否為字元串、數值、布爾值或 undefined 的最好方式。其傳回值為字元串類型,其使用方法如下:typeof 是一個操作符,不是一個函數,但是使用可以将變量作為參數傳入:
a、typeof operand
b、typeof (operand)
傳回值
含義值
"undefined"
未定義
"boolean"
布爾值
"string"
字元串
"number"
數值
"object"
對象(而不是函數)或 null
"function"
函數
"symbol"
符号
typeof雖然對原始值很有用,但它對引用值的用處不大。我們通常不關心一個值是不是對象,而是想知道它是什麼類型的對象。為了解決這個問題,ECMAScript 提供了 instanceof 操作符。使用如下:
所有引用值都是 Object 的執行個體,是以通過 instanceof 操作符檢測任何引用值和Object 構造函數都會傳回 true 。類似地,如果用 instanceof 檢測原始值,則始終會傳回 false ,因為原始值不是對象。
instanceof 運算符用于判斷構造函數的 prototype 屬性是否出現在對象的原型鍊中的任何位置。其實作原理如下:
typeof 與 instance 都是判斷資料類型的方法,差別如下:
<code>typeof</code>會傳回一個變量的基本類型,<code>instanceof</code>傳回的是一個布爾值
<code>instanceof</code> 可以準确地判斷複雜引用資料類型,但是不能正确判斷基礎資料類型
而<code>typeof</code> 也存在弊端,它雖然可以判斷基礎資料類型(<code>null</code> 除外),但是引用資料類型中,除了<code>function</code> 類型以外,其他的也無法判斷
可以看到,上述兩種方法都有弊端,并不能滿足所有場景的需求
如果需要通用檢測資料類型,建議采用<code>Object.prototype.toString</code>,調用該方法,統一傳回格式<code>“[object Xxx]”</code>的字元串。使用如下:
以上就是本文的全部内容,希望給讀者帶來些許的幫助和進步,友善的話點個關注,小白的成長之路會持續更新一些工作中常見的問題和技術點。