Napotkałem wiele błędów w moim kodzie, ponieważ spodziewałem się tego wyrażenia:
Boolean([]);
ocenić na fałsz.
Ale to nie był przypadek, jak ocenił jako prawdziwy.
Dlatego funkcje, które prawdopodobnie zwróciły w []
ten sposób:
// Where myCollection possibly returned [ obj1, obj2, obj3] or []
if(myCollection)
{
// ...
}else
{
// ...
}
nie zrobił oczekiwanych rzeczy.
Czy mylę się, zakładając, że jest []
to pusta tablica?
Czy to zachowanie jest spójne we wszystkich przeglądarkach? Czy też są tam jakieś pułapki? Nawiasem mówiąc, zaobserwowałem to zachowanie w Goolgle Chrome.
javascript
arrays
object
conditional
racl101
źródło
źródło
myCollection.length > 0
?myCollection
tak się stanienull
lubundefined
. Musisz użyćif(myCollection && myCollection.length > 0)
.myCollection.length > 0
oferuje wartość logiczną, która robi to, o co prosił OP ... nadal musi wykonać pracę stamtąd.Odpowiedzi:
Z http://www.sitepoint.com/javascript-truthy-falsy/
Następujące wartości są zawsze fałszywe:
Wszystkie inne wartości są prawdziwe, w tym „0” (zero w cudzysłowie), „fałsz” (fałsz w cudzysłowie), puste funkcje, puste tablice i puste obiekty.
Jeśli chodzi o przyczynę , podejrzewam, że dzieje się tak dlatego, że tablice JavaScript są po prostu szczególnym typem obiektu. Specjalne traktowanie tablic wymagałoby dodatkowego obciążenia podczas testowania
Array.isArray()
. Ponadto prawdopodobnie byłoby mylące, gdyby prawdziwe tablice zachowywały się inaczej niż inne obiekty podobne do tablic w tym kontekście, podczas gdy sprawianie, że wszystkie obiekty podobne do tablic zachowują się tak samo, byłoby jeszcze droższe.źródło
[] == false
które otrzymatrue
.==
komparatora w opublikowanym przez Ciebie linku. Skomentowałem, żeby być ostrożnym, oczekując prawdziwej lub fałszywej oceny.Powinieneś sprawdzić
.length
z tej tablicy, aby zobaczyć, czy zawiera jakieś elementy.if (myCollection) // always true if (myCollection.length) // always true when array has elements if (myCollection.length === 0) // same as is_empty(myCollection)
źródło