web-dev-qa-db-fra.com

JavaScript: tableau vide, [] est évalué à true dans les structures conditionnelles. Pourquoi est-ce?

Je rencontrais beaucoup de bugs dans mon code parce que je m'attendais à cette expression:

Boolean([]); à évaluer comme faux.

Mais ce n’était pas le cas, car il s’avérait vrai.

Par conséquent, les fonctions qui ont éventuellement retourné [] comme ça:

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

}else
{
  // ...
}

n'a pas fait les choses attendues.

Est-ce que je me trompe en supposant que [] un tableau vide?

En outre, ce comportement est-il cohérent dans tous les navigateurs? Ou y a-t-il des pièges aussi? J'ai observé ce comportement dans Goolgle Chrome en passant.

67
racl101

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

Les valeurs suivantes sont toujours faussées:

  • false
  • 0 (zero)
  • "" (chaîne vide)
  • null
  • non défini
  • NaN (une valeur numérique spéciale signifiant Non-a-Number!)

Toutes les autres valeurs sont vérité, y compris "0" (zéro entre guillemets), "faux" (faux entre guillemets), des fonctions vides, des tableaux vides et des objets vides.

77
Barmar

Vous devriez vérifier le .length de ce tableau pour voir s’il contient des éléments.

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