js中判斷數據類型的四種方法總結

js中判斷數據類型的四種方法

前言

  在js中,咱們常常須要判斷數據的類型,那麼哪些方法能夠用來判斷數據的類型呢?哪一種方法判斷數據類型最準確呢?面試

咱們來一個個分析:
app

1.typeof

  typeof是一個運算符,使用方式有兩種:1.typeof(表達式)2.typeof 變量名。返回值爲表示類型的字符串。能判斷的類型有函數

  Number、String、Boolean,Undefined、Object、Function、Symbol等spa

  實例詳解:prototype

  

 注意最後兩個typeof null typeof [] 返回的都是object。能夠看出typeof並不能準確的判斷出array和null。對象

結論:blog

  typeof 對對象類型的值的類型不能做出準確判斷,能準確判斷出基本數據類型的值!原型鏈

2.instanceof

  A instanceof B 判斷 A 是否爲 B 的實例,若是是,則返回 true,不是則返回 false。instanceof檢測的是原型,內部機制其實就是判斷對象 A 的原型鏈中是否有 B 的原型。字符串

  實例詳解:原型

 

從上面的實例咱們能夠看出,基本數據類型的值不能用 instanceof 判斷類型,因爲undefined和null沒有構造函數,因此使用 instanceof 會報錯!而由基本數據包裝類建立的對象能夠用 instanceof 判斷類型。

結論:

  instanceof 只能用於判斷對象,基本數據類型值不能判斷,因此也不能準確的判斷出全部的類型!

3.constructor 

   當一個函數F被定義時,JS引擎會爲F添加prototype原型,而後在prototype上添加一個constructor屬性,並讓其指向F的引用,F利用原型對象的constructor屬性引用了自身,當F做爲構造函數建立對象時,原型上的constructor屬性被遺傳到了新建立的對象上,從原型鏈角度講,構造函數F就是新對象的類型。這樣作的意義是,讓對象誕生之後,就具備可追溯的數據類型。

  

從實例咱們能夠看出:constructor判斷undefined和null時,會報錯。

結論:

  constructor能判斷基本數據類型string、number、boolean和對象類型(array、function等等),可是它不能判斷undefined和null。因此它判斷類型值也不十分準確!

 

 

4.Object.prototype.toString.call()(最準確的判斷類型的方法,推薦使用,也是面試官想要的答案!!!)

  toString()是Object的原型方法,調用該方法,默認返回當前對象的[[Class]]。這是一個內部屬性,其格式爲[object Xxx],其中Xxx就是對象的類型。

  對於Object對象,直接調用toString()就能返回[object Object],而對於其餘對象,則須要經過call、apply來調用才能返回正確的類型信息。

 

  

  從實例咱們能夠看出該方法能判斷基本類型也能判斷 Array 和 Function。

  對於Object對象:

  

  實例可見,對於Object對象,能夠直接使用 toString() 方法,對於其餘內置對象,Object.prototype.toString.call() 方法都能準確的判斷出其類型。

  結論:

    Object.prototype.toString.call() 方法是判斷類型的最準確的方法!

總結:

  要判斷一個值的類型,最準確的方法就是Object.prototype.toString.call()

相關文章
相關標籤/搜索