2013-10-02 11 views
22

Napotkałem wiele błędów w moim kodzie, ponieważ oczekiwałem tego wyrażenia:JavaScript: pusta tablica, [] zwraca wartość true w strukturach warunkowych. Dlaczego to?

Boolean([]);, aby ocenić jako fałszywy.

Ale tak nie było, ponieważ oceniono to jako prawdziwe.

Dlatego funkcje, które ewentualnie zwrócone [] takiego:

// Where myCollection possibly returned [ obj1, obj2, obj3] or [] 
if(myCollection) 
{ 
    // ... 

}else 
{ 
    // ... 
} 

nie zrobił oczekiwanych rzeczy.

Czy myliłem się przyjmując, że [] jest pustą tablicą?

Czy zachowanie to jest spójne we wszystkich przeglądarkach? Czy są tam też jakieś potknięcia? Obserwowałem to zachowanie w Goolgle Chrome przy okazji.

+0

tablice są obiektami, obiekty są zgodne z prawdą. po prostu zapytaj o array.length, jeśli nie zero, będzie to prawda. kiedy jawnie przekonwertujesz na Boolean, tablica najpierw zmieni się w pusty łańcuch, a następnie pusty łańcuch zmieni się w false. – dandavis

+0

Dlaczego nie używasz 'myCollection.length> 0'? – Steve

+0

@Steve - to nie zadziała, jeśli 'myCollection' stanie się' null' lub 'undefined'. Musisz użyć 'if (myCollection && myCollection.length> 0)'. –

Odpowiedz

35

Od http://www.sitepoint.com/javascript-truthy-falsy/

Poniższe wartości są zawsze falsy:

  • fałszywe
  • 0 (zero)
  • "" (pusty ciąg znaków)
  • zerowy
  • undefined
  • NaN (specjalny wartość liczbowa oznacza not-a-number!)

Wszystkie inne wartości są truthy, w tym "0" (zero w cudzysłowie), "false" (fałsz w cudzysłowie), puste funkcje , puste tablice i puste obiekty.

5

Powinieneś sprawdzić .length tej tablicy, aby sprawdzić, czy zawiera on jakiekolwiek elementy.

if (myCollection) // always true 
if (myCollection.length) // always true when array has elements 
if (myCollection.length === 0) // same as is_empty(myCollection) 
+0

@Steve Dlaczego tak jest? – marczellm

+0

@marczellm Ten komentarz Steve'a jest nieaktualny, powiadomił DevIshOne o brakującym warunku _ "kiedy array ma elementy" _, co zostało poprawione w [the edit] (http://stackoverflow.com/posts/19146220/revisions) . – mucaho

Powiązane problemy