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


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

1.我們首先回顧一下typeof操作符的用法

操作符可以用來檢測給定變量的數據類型,返回的值有以下幾種:undefined,boolean,string,number,object,function

2.使用typeof來判斷

我們驚喜的發現:除了方法會返回function值之外,[]和{}都是返回的object值,所以無法通過typeof來區分對象還是數組,這種方法不可用。

3.根據構造函數來判斷

instanceof操作符可以來表示實例是否屬於某個構造函數創建的。

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

 

 

因為改變了obj4的原型指向導致使用instanceof字符判斷出obj4也為數組類型了,所以此方法也不可取。

3.使用原型對象判斷

發現結果和使用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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM