面試題-如何判斷一個對象是否是數組類型

在前端面試中,咱們常常會被問道,如何判斷一個對象是否是數組類型,下面就這一點展開詳細的描述,並總結一下共有幾種方法。前端

1.咱們首先回顧一下typeof操做符的用法面試

操做符能夠用來檢測給定變量的數據類型,返回的值有如下幾種:undefined,boolean,string,number,object,function數組

2.使用typeof來判斷函數

咱們驚喜的發現:除了方法會返回function值以外,[]和{}都是返回的object值,因此沒法經過typeof來區分對象仍是數組,這種方法不可用。this

3.根據構造函數來判斷
prototype

instanceof操做符能夠來表示實例是否屬於某個構造函數建立的。設計

從上圖來看,obj1是構造函數Array的實例沒問題,obj4也是構造函數的實例類型,顯然obj4應該是對象數據類型,爲何會產生這種狀況,obj4.__proto__=obj1,obj4改變了它的原型指向,草圖以下:對象

 

 

由於改變了obj4的原型指向致使使用instanceof字符判斷出obj4也爲數組類型了,因此此方法也不可取。blog

3.使用原型對象判斷ip

發現結果和使用instanceof字符同樣,因此仍是沒法區[]是數組類型

4.根據對象的class屬性來判斷

class:每一個對象的內部屬性,記錄建立對象時使用的類型名,一旦建立,沒法修改。

問題:數組類型等內置類型,重寫了toString方法,直接調用數組對象的方法,不在返回class

解決:使用call替換this爲指定對象調用Object原型上的toString方法便可。

5.Array.isArray直接判斷

Array.isArray() 用於肯定傳遞的值是不是一個 Array。若是對象是 Array,則爲true; 不然爲false.

綜上所述,判斷一個對象是否是數組類型最可靠的方法是這兩種: Object. prototype.toString.call(obj)===[ object Array]和Array. isArray(obj)。


參考資料:

《JavaScript高級程序設計》  MDN

相關文章
相關標籤/搜索