Avatar ·

L'expression (a == 1 && a == 2 && a == 3) peut-elle être true en JavaScript ?

Bonjour à tous ! J'ai récemment commencé à apprendre JavaScript et je suis tombé sur un problème très étrange. Il vérifie si la condition `(a == 1 && a == 2 && a == 3)` peut jamais être vraie (true). À première vue, cela semble complètement absurde — comment une même variable peut-elle être égale à trois nombres différents en même temps ? Si j'écris du code normal : ```javascript let a = 1; console.log(a == 1 && a == 2 && a == 3); // false ``` Alors, bien sûr, j'obtiens false. Mais j'ai entendu dire qu'il y a en JavaScript des astuces avec la conversion de types qui peuvent rendre une telle expression vraie. Je sais que `==` (égalité non stricte) peut convertir les types, mais je ne comprends toujours pas comment c'est possible. Expliquez-moi, s'il vous plaît, peut-on faire fonctionner cette condition ? Si oui, comment ? Et surtout, pourquoi ? Est-ce une sorte de magie ou une particularité du langage ? Je serais reconnaissant pour une explication détaillée avec des exemples de code. <<>>

Oui, c'est possible ! Et voici comment cela fonctionne

Vous avez raison, à première vue cela semble impossible. Mais en JavaScript, il existe des mécanismes de conversion implicite qui peuvent rendre cette condition vraie. Par exemple, en utilisant un objet avec une méthode `valueOf` ou `toString` qui retourne des valeurs différentes à chaque appel, on peut faire en sorte que `a == 1`, `a == 2` et `a == 3` soient tous vrais. Voici un exemple : ```javascript const a = { value: 0, valueOf: function() { return ++this.value; } }; console.log(a == 1 && a == 2 && a == 3); // true ``` Ici, à chaque comparaison, la méthode `valueOf` est appelée et incrémente la valeur, ce qui rend l'expression vraie. C'est une particularité de JavaScript liée à la conversion implicite de types.