Maison > interface Web > js tutoriel > le corps du texte

L'égalité lâche (==) de JavaScript peut-elle jamais rendre (a == 1 && a == 2 && a == 3) vrai ?

Barbara Streisand
Libérer: 2024-11-03 06:35:30
original
266 Les gens l'ont consulté

Can JavaScript's Loose Equality (==) Ever Make (a == 1 && a == 2 && a == 3) True?

Est-ce que (a== 1 && a ==2 && a==3) est-il toujours vrai ?

Question :

L'expression (a== 1 && a ==2 && a==3) peut-elle jamais être évaluée comme vraie en JavaScript, malgré l'incohérence logique ?

Comprendre l'expression Évaluation :

Normalement, l'expression (a== 1 && a ==2 && a==3) serait toujours évaluée comme fausse car la valeur de « a » ne peut pas être simultanément 1, 2, et 3. Cependant, l'opérateur d'égalité de JavaScript (==) présente quelques bizarreries lorsqu'il s'agit de valeurs non primitives telles que des objets.

Conversion de valeur personnalisée :

JavaScript autorise les objets pour définir leurs propres fonctions toString() ou valueOf(), qui sont utilisées pour convertir l'objet en une valeur primitive à des fins de comparaison. En tirant parti de cela, il est possible de créer un objet qui change de valeur à chaque fois qu'il est converti.

Objet personnalisé avec fonction Dynamic toString() :

Considérez ce qui suit object :

<code class="js">const a = {
  i: 1,
  toString: function () {
    return a.i++;
  }
}</code>
Copier après la connexion

Cet objet a une propriété 'i' et une fonction toString() personnalisée. Chaque fois que l'objet est converti en une valeur primitive (par exemple, via == ou console.log()), la fonction toString() est appelée, renvoyant la valeur actuelle de « i » et l'incrémentant.

Astuce d'évaluation d'expression :

En utilisant cet objet personnalisé, l'expression (a == 1 && a == 2 && a == 3) peut maintenant être évaluée comme vraie :

<code class="js">if(a == 1 && a == 2 && a == 3) {
  console.log('Hello World!');
}</code>
Copier après la connexion

La première comparaison (a == 1) renvoie vrai car la fonction toString() renvoie 1. La deuxième comparaison (a == 2) renvoie également vrai car la fonction toString() est à nouveau appelée, renvoyant 2. De même , la troisième comparaison (a == 3) renvoie vrai, ce qui entraîne l'évaluation de l'expression entière comme étant vraie.

Conclusion :

Bien que cela puisse sembler contre-intuitif, il est possible pour (a== 1 && a ==2 && a==3) d'évaluer true en JavaScript en créant un objet personnalisé qui modifie dynamiquement sa valeur lors de la conversion. Cela démontre le potentiel de comportement inattendu lorsqu'il s'agit de valeurs non primitives en JavaScript.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal