Ich habe viele Fehler in meinem Code gefunden, weil ich diesen Ausdruck erwartet habe:JavaScript: leeres Array, [] wird in bedingten Strukturen als wahr ausgewertet. Warum ist das?
Boolean([]);
, um zu false auszuwerten.
Aber das war nicht der Fall, wie es auf wahr ausgewertet wurde.
Daher Funktionen, die zurückgegeben möglicherweise []
wie folgt aus:
// Where myCollection possibly returned [ obj1, obj2, obj3] or []
if(myCollection)
{
// ...
}else
{
// ...
}
hat die Dinge nicht tun erwartet.
Bin ich falsch angenommen []
ein leeres Array?
Ist dieses Verhalten auch in allen Browsern konsistent? Oder gibt es da auch irgendwelche Probleme? Ich habe dieses Verhalten übrigens in Goolgle Chrome beobachtet.
Arrays sind Objekte, Objekte sind truthy. Fragen Sie einfach nach array.length, wenn nicht null, wird es truthy. Wenn Sie explizit in Boolean konvertieren, wird das Array zuerst zu einem leeren String, dann wird der leere String zu false. – dandavis
Warum verwenden Sie 'myCollection.length> 0' nicht? – Steve
@Steve - das wird nicht funktionieren, wenn 'myCollection'' null' oder 'undefined' ist. Sie müssen 'if (myCollection && myCollection.length> 0)' verwenden. –