面試題 如何判斷乙個物件是不是陣列型別

2021-09-25 07:41:33 字數 1600 閱讀 8241

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

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)。

如何判斷乙個物件是不是數值

要判斷乙個物件是不是陣列的方式有多種,這裡我們乙個乙個來分析 在使用array.isarray方法之前,我們先來普及一下它的作用以及如何使用 作用 它是用於判斷某個物件是否是陣列 使用 語法格式 array.isarray 物件 下面我們就用乙個小例項來看看它怎麼判斷乙個物件是不是陣列 functi...

如何判斷乙個js物件是不是Array

1.instance of 2 constructor 3 isarray 1 var a new array a instanceof array true 2 var a new array a.constructor array true 3 對支援isarray的瀏覽器 var a new ...

如何判斷乙個js物件是不是Array

1.instance of 2 constructor 3 isarray 1 var a new array a instanceof array true 2 var a new array a.constructor array true 3 對支援isarray的瀏覽器 var a new ...