Fermer

avril 12, 2022

Valeurs vraies et fausses : quand tout n'est pas égal en JavaScript


Comparer deux choses pour l'égalité peut souvent faire trébucher le développeur JavaScript imprudent, car le langage a plusieurs bizarreries dont nous devons être conscients.

Dans cet article, nous verrons pourquoi, en explorant à la fois les opérateurs d'égalité double et triple, ainsi que le concept de valeurs vraies et fausses en JavaScript. Lorsque vous aurez fini de lire, vous comprendrez comment JavaScript effectue ses comparaisons, ainsi que comment les valeurs de vérité et de fausseté peuvent vous aider à écrire du code plus propre.

Vrai et faux : quand tout n'est pas égal en JavaScript

Taper en JavaScript

Les variables JavaScript sont typées de manière lâche/dynamique et le langage ne se soucie pas de la façon dont une valeur est déclarée ou modifiée :

laisserX;X= 1;X= '1';X= [1]; 

Des valeurs apparemment différentes correspondent àvraien comparaison avec==(égalité lâche ou abstraite) car JavaScript convertit (effectivement) chacun en une représentation sous forme de chaîne avant la comparaison :


1 == '1';
1 == [1];
'1' == [1];

Vrai et faux : quand tout n'est pas égal en JavaScript

Un plus évidentfauxrésultat se produit lors de la comparaison avec===(égalité stricte) car le type est considéré :


1 === '1';
1 === [1];
'1' === [1];

En interne, JavaScript définit une valeur sur l'un des sept types de données primitifs :

  • Non défini (une variable sans valeur définie)
  • Null (une seule valeur nulle)
  • Booléen (unvraiou alorsfauxvaleur)
  • Numéro (ceci inclutInfinietNaN– pas un nombre !)
  • BigInt (une valeur entière supérieure à 2^53 – 1)
  • Chaîne (données textuelles)
  • Symbole (une primitive unique et immuable nouvelle pour ES6/2015)

Tout le reste est un objet, y compris les tableaux.

Vrai et faux : quand tout n'est pas égal en JavaScript

Valeurs véridiques ou fausses en JavaScript

En plus d'un type, chaque valeur a également une valeur inhérenteValeur booléennegénéralement connu sous le nom soitla véritéou alorsfaux . Certaines des règles qui déterminent comment les valeurs non booléennes sont traduites en valeurs vraies ou fausses sont un peu bizarres. Comprendre les concepts et leur effet sur la comparaison aide lors du débogage des applications JavaScript.

Les valeurs suivantes sonttoujours faux:

  • faux
  • 0(zéro)
  • -0(moins zéro)
  • 0n(BigIntzéro)
  • '',"",``(chaîne vide)
  • nul
  • indéfini
  • NaN

Tout le reste estla vérité . Qui comprend:

  • '0'(une chaîne contenant un seul zéro)
  • 'faux'(une chaîne contenant le texte "false")
  • [](un tableau vide)
  • {}(un objet vide)
  • une fonction(){}(une fonction "vide")

Une seule valeur peut donc être utilisée dans certaines conditions. Par example:

si (valeur) {
  
}
autre {
  
  
}

document.all

Vous pourriez aussi voirdocument.all répertorié comme une valeur fausse. Cela renvoie unHTMLToutCollection qui contient une liste de tous les éléments d'un document. Et bien que cela soit considéréfauxdans un contexte booléen, c'est une fonctionnalité obsolète et MDN déconseille son utilisation.

Vrai et faux : quand tout n'est pas égal en JavaScript

Comparaisons lâches d'égalité avec==

Des situations inattendues peuvent se produire lors de la comparaisonla véritéetfauxvaleurs à l'aide de==égalité lâche :

==vraifaux0''nulindéfiniNaNInfini[]{}
vraivraifauxfauxfauxfauxfauxfauxfauxfauxfaux
fauxfauxvraivraivraifauxfauxfauxfauxvraifaux
0fauxvraivraivraifauxfauxfauxfauxvraifaux
''fauxvraivraivraifauxfauxfauxfauxvraifaux
nulfauxfauxfauxfauxvraivraifauxfauxfauxfaux
indéfinifauxfauxfauxfauxvraivraifauxfauxfauxfaux
NaNfauxfauxfauxfauxfauxfauxfauxfauxfauxfaux
Infinifauxfauxfauxfauxfauxfauxfauxvraifauxfaux
[]fauxvraivraivraifauxfauxfauxfauxfauxfaux
{}fauxfauxfauxfauxfauxfauxfauxfauxfauxfaux

Les règles:

  • fauxzéro et chaînes vides sont tous équivalents.
  • nuletindéfinisont équivalents à eux-mêmes et les uns aux autres, mais rien d'autre.
  • NaNn'équivaut à rien –dont un autreNaN!.
  • Infiniest vrai —mais ne peut être comparé àvraiou alorsfaux!.
  • Un tableau vide est vrai —tout en comparant avecvraiestfauxet en comparant avecfauxestvrai?!.

Notez la différence dans la manière dont les valeurs vides de différents types peuvent être évaluées. Une chaîne vide ouindéfinivalue sont fausses, mais un tableau ou un objet vide sont véridiques.

Exemples:


faux == 0;
0 == '';
nul == indéfini;
[] == faux;
!![0] == vrai;


faux == nul;
NaN == NaN;
Infini == vrai;
[] == vrai;
[0] == vrai;

Comparaisons strictes d'égalité avec===

La situation est plus claire lors de l'utilisation d'une comparaison strictement égale car les types de valeur doivent correspondre :

===vraifaux0''nulindéfiniNaNInfini[]{}
vraivraifauxfauxfauxfauxfauxfauxfauxfauxfaux
fauxfauxvraifauxfauxfauxfauxfauxfauxfauxfaux
0fauxfauxvraifauxfauxfauxfauxfauxfauxfaux
''fauxfauxfauxvraifauxfauxfauxfauxfauxfaux
nulfauxfauxfauxfauxvraifauxfauxfauxfauxfaux
indéfinifauxfauxfauxfauxfauxvraifauxfauxfauxfaux
NaNfauxfauxfauxfauxfauxfauxfauxfauxfauxfaux
Infinifauxfauxfauxfauxfauxfauxfauxvraifauxfaux
[]fauxfauxfauxfauxfauxfauxfauxfauxfauxfaux
{}fauxfauxfauxfauxfauxfauxfauxfauxfauxfaux

La seule exception estNaNqui reste obstinément inéquivalent à tout.

Recommandations pour travailler avec des valeurs vraies ou fausses

Les valeurs de vérité et de fausseté peuvent attraper les développeurs les plus expérimentés. Ceux qui découvrent la programmation ou qui migrent depuis d'autres langages n'ont aucune chance ! Heureusement, il existe trois étapes simples pour détecter les erreurs les plus difficiles à repérer lors de la gestion des variables véridiques et fausses. Regardons chacun à son tour.

1. Évitez les comparaisons directes

Il est rarement nécessaire de comparer deux valeurs vrai et faux lorsqu'une seule valeur équivaudra toujours à vrai ou faux :


si (X== faux) 



si (!X) 

2. Utilisez===stricte égalité

Utiliser un===égalité stricte (ou!==inégalité stricte) comparaisons pour comparer les valeurs et éviter les problèmes de conversion de type :


si (X==Oui) 




si (X===Oui) 


3. Convertir en valeurs booléennes réelles si nécessaire

Vous pouvez convertir n'importe quelle valeur en une valeur booléenne réelle en JavaScript en utilisant soit leConstructeur booléenou un double négatif!! . Cela vous permettra d'être absolument certain qu'un faux n'est généré que parfaux,0,"",nul,indéfinietNaN:


si (X===Oui) 




si (booléen(X) === booléen(Oui)) 

si (!!X=== !!Oui) 


Lebooléenretours du constructeurvrailorsqu'il est passé une valeur de vérité et retournefaux lorsqu'il est passé une valeur fausse. Cela pourrait être utile lorsqu'il est combiné avec une méthode d'itération. Par example:

constantevaleurs_de_vérité= [
  faux,
  0,
  ``,
  '',
  "",
  nul,
  indéfini,
  NaN,
  '0',
  'faux',
  [],
  {},
  une fonction() {}
].filtre(booléen);


console.Journal(valeurs_de_vérité);

Conclusion

Les valeurs de vérité et de fausseté vous permettent d'écrire des conditions JavaScript concises et des opérateurs ternaires. Cependant, considérez toujours les cas extrêmes. Un tableau vide non autorisé ou une variable NaN peut entraîner de nombreuses heures de débogage !

Avez-vous besoin d'aide pour tout ce que nous avons couvert ici ? Pourquoi ne pas vous diriger vers notreForum Javascript et poser une question. Nous avons une équipe d'experts sympathiques prêts à vous aider.




Source link