182 votes

Pourquoi les tableaux JavaScript vides sont-ils évalués à true dans les structures conditionnelles?

J'ai rencontré beaucoup de bugs dans mon code parce que je m'attendais à ce que cette expression :

Boolean([]); évalue à faux.

Mais ce n'était pas le cas car elle a évalué à vrai.

Par conséquent, les fonctions qui retournaient éventuellement [] comme ceci :

// Où myCollection retourne éventuellement [ obj1, obj2, obj3] ou []
if(myCollection)
{
  // ...

}else
{
  // ...
}

n'ont pas fait ce à quoi je m'attendais.

Suis-je dans l'erreur en supposant que [] est un tableau vide ?

Aussi, ce comportement est-il cohérent dans tous les navigateurs ? Ou y a-t-il aussi des pièges ? J'ai observé ce comportement dans Google Chrome d'ailleurs.

0voto

ZloiGoroh Points 59

Aussi, je tiens à ajouter que tous les objets en JavaScript (les tableaux sont aussi des objets) sont stockés en mémoire sous forme de liens et ces liens ne sont jamais nuls ou zéro, c'est pourquoi Boolean({}) === true, Boolean([]) === true.

C'est aussi la raison pour laquelle des objets identiques (copiés par valeur et non par lien) ne sont jamais égaux.

{} == {} // false

let a = {};
let b = a; // copie par lien
b == a // true

0voto

Shivam Sharma Points 183

Tout comme en JavaScript, tout est un objet donc pour falsy et vide, j'utilise la condition ci-dessous :

if(value && Object.keys(value).length){
    // Non falsy et non vide
}
else{
    // falsy ou tableau/objet vide
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X