typeof 爲什麼判斷null是對象類型?instanceof判斷的原理是什麼?

JS的數據類型有七種
原始類型:

  • Boolean
  • Number
  • String
  • undefined
  • null
  • Symbol
    對象類型 Object

用typeof判斷類型

會出現下面的問題

typeof null // Object

typeof判斷其他的原始類型不會出現問題。

typeof 22 // 'number'
typeof 'lorry' // 'string'
typeof undefined // 'undefined'
typeof false // 'boolean'
typeof Symbol() // 'symbol'

出現這個結果的原因:

在JS的最初版本中使用的是32位系統,爲了性能考慮使用低位存儲變量的類型信息,000開頭的是對象,null是全0,所以將null誤判爲Object了,雖然現在的內部類型判斷代碼已經改變了,但bug永久的遺留下來了

typeof判斷對象

typeof判斷對象,除了function都會顯示object,所以typeof並不能準確地判斷變量類型

instanceof

可以用instanceof判斷對象的正確類型,它的內部機制是通過原型鏈來判斷的。

在這裏插入圖片描述
ps:是在掘金小冊 “前端面試之道” 看到的,剛好觸及到盲區就記錄下來了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章