怎麼判斷乙個js物件是不是Array型別?

2021-09-02 03:44:27 字數 2145 閱讀 5640

對於function ,string, number, undefined等幾種資料型別的物件來說,typeof完全可以判斷出來,但是為array的時候

var arr =

newarray

('1'

,'2'

,'3'

,'4');

alert

(typeof

(arr)

;//object

你會收到乙個object的答案,有點讓人失望。

instanceof操作運算子會返回乙個boolean型別的值, 指出物件是否是特定的型別

console.

log(

instanceof

(arr)))

;//true

返回true

小總結:看來我們今天的問題已經得到了解決,但事實上在多個frame中穿梭就會出現大問題。

var iframe = document.

createelement

('iframe');

document.body.

(iframe)

; xarray = window.frames[window.frames.length-1]

.array;

var array =

newxarray

('1'

,'2'

,'3'

,'4');

alert

(array instanceof

array);

//false

alert

(array.constructor === array)

//false

結果返回兩個false,有點令人失望。

ecma-626寫道

object.prototype.tostring()	 when the tostring method is called ,the following steps taken;

1.get the [[class]] property of this object .

2.compute a string value by concatenating the three string "[object", result(1),and "]".

3.return result(2).

上面的規範定義了object.prototype.tostring的行為;首先,取得物件的乙個內部屬性[[ class]],然後依據這個屬性,返回乙個類似"[object array]"的字串作為結果(看過ecma標準的都應該知道,[[ ]]用來表示語言內部用到的,外部不可以直接訪問的屬性,稱為內部屬性)。利用這個方法,再配合call,我們可以取得任何物件的內部屬性[[class]], 然後把型別檢測轉化為字串比較,以達到我們的目的。還是先來看看再ecma標準中array的描述吧。

new

array

([item0,

[item1[

,...]]

]);the [

[class

]] property of the newly constrcted object is set to "array"

.

於是利用這點,第三種方法登場了。

function

isarray

(obj)

call改變tostring的引用為待檢測的物件,返回此物件的字串表示,然後對比此字串是否是』[object array]』,以判斷是否是array的例項。也許你要問為什麼不直接o.tostring()?嗯,雖然array繼承自object, 也會有tostring 方法,但是這個方法可能會被改寫而達不到我們的要求,而object.prototype會很純淨。

和前面的幾個方案不同,這個方法很好的解決了跨frame物件構建的問題,經過測試,各大瀏覽器的相容也很好,可以放心使用。乙個好訊息是,很多框架都計畫借鑑此方法以實現某些特殊的比如陣列,正規表示式等物件型別的判定,不用我們自己寫了。

如何判斷乙個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 ...

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

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