2016-03-01 50 views
0

我有一些if語句,我想驗證數組的長度。比方說,它是這樣的:如何驗證數組是否存在以及它的長度在最少的步驟?

if (object.someArray.length > 1){ 
    doSomething() 
} 

然而,當的someArray沒有定義(也許它不是爲某個對象,這是可能的定義),我得到一個錯誤:

Cannot read property 'length' of null 

這使得意義,因爲object.someArray未定義。

我的問題是:什麼是最好的方式來驗證數組存在及其長度,以最少的步驟?

謝謝!

回答

3

非常通用和全面的測試:如果數組存在,是不爲空

if(object && object.someArray && object.someArray.length) 

對於您的情況:

if(object.someArray && object.someArray.length > 1) 

編輯:對於那些誰不知道這個叫鴨打字:我們是不是真的檢查,如果對象是一個數組,我們考慮如果該對象有一個屬性長度,它是一個數組。很多圖書館都這樣做。只要你沒有在同一個變量中存儲不同類型的JavaScript對象(string/array/object),這段代碼是安全的。

+0

方法對於例如'var object = {someArray:{length:2}};'即使上述條件解析爲'true'。 –

+0

@PeterSeliger這被稱爲鴨子打字,這是大多數圖書館做的:) – Walfrat

+0

我知道鴨子打字。但即使你最有可能對你的方法是正確的,OP應該意識到這種情況,明確何時確保某種類型,何時處理它更慷慨。對於給定的示例,數組有時只能被分配/定義,有時不可以。在這種情況下,我不會賭一個長度屬性爲'Array'的對象,因此會傾向於鴨類型的檢測(順便說一句,後者也是我的首選通用方法)。 –

1

你能做到在一個單一的條件像

if (object.someArray && object.someArray.length > 1){ 
    //Do Something 
} 

如果object.someArray是不確定的,它會返回false和未來情況不會被評估

+0

方法確實失敗,例如, 'var object = {someArray:new String(12)};'即使上述條件解析爲'true'。例如, –

0

the best way to verify that the array exists AND its length

,最好的辦法是做正如你寫的:

if (array && array.length > 0 { ... } 
2

試圖通過Array.isArray

if (Array.isArray(object.someArray) && object.someArray.length > 1) 
0

檢查數組你可以檢查一下這種方式。

if(object.someArray && object.someArray.length > 1) { 
    doSomething(); 
} 

如果someArray不存在,那麼它將是假的,它將不會檢查其長度,因爲短路。

相關問題