2014-03-06 41 views
2

jQuery和陣列isArray工作不正常jQuery和Array isArray無法正常工作?

如果我做的:

var tags = document.getElementsByTagName('div'); 

jQuery.isArray(tags) // returns false 
Array.isArray(tags) // returns false 

function isArray(object){ 
    return typeof object === "object" && object.length > -1; 
} 

isArray(tags) // return true 

此問題會導致實際的錯誤在我的網站:

在我的網站我有輸入名稱的表單標籤「計劃」。

如果我只有一個輸入名稱「plan」,它將返回一個無數組。

但是,如果我有兩個輸入,都有名稱「計劃」,它會返回一個數組。我使用jQuery.isArray來檢查它是否是一個數組,但不得不放棄使用jQuery isArray。

人們評論說它是nodelist,但nodelist的用法與數組完全相同。那麼在什麼情況下,你真的想避免它像數組一樣使用?

+1

這取決於。你如何定義「數組」? '標籤'_不是'數組'。 – SLaks

+0

如果他們都返回錯誤,他們有機會得到它是正確的,你錯了,它不是一個真正的數組。 – adeneo

+1

@adeneo:具體來說,它是一個NodeList。 – SLaks

回答

5

不,它工作正常。 getElementsByTagName返回一個nodelist - 一個數組LIKE對象,但不是一個實際的數組,所以jQuery是正確的返回false。

您的函數返回true,因爲它正在測試作爲對象的類型(一個nodelist是一個對象)並且它有一個長度(一個nodelist有一個長度)。

如果你真的想測試一個數組使用foo instanceof Array