Est-ce que (a == 1 && a == 2 && a == 3) peut être true en JavaScript ?
Bonjour à tous ! Je suis débutant en JavaScript et je suis tombé sur un problème étrange lors d'un entretien. On m'a demandé : est-ce que l'expression `(a == 1 && a == 2 && a == 3)` peut jamais être vraie ?
À première vue, cela semble complètement absurde. Comment une même variable `a` peut-elle être égale à 1, 2 et 3 en même temps ? Dans n'importe quel langage de programmation normal, c'est impossible. Mais on m'a dit qu'en JavaScript, il existe des astuces qui permettent de réaliser cela.
Je comprends que cela est lié aux particularités de la coercition de types (type coercion) en JavaScript, mais je n'arrive pas à comprendre comment cela fonctionne exactement. Si on utilise la comparaison stricte `===`, cette astuce ne fonctionnera certainement pas, mais avec la comparaison non stricte `==`, il y a des failles.
Peut-être que quelqu'un pourrait expliquer comment c'est possible ? Je m'intéresse non seulement aux implémentations concrètes, mais aussi au fondement théorique — pourquoi JavaScript permet-il des choses aussi étranges ? Et y a-t-il une application pratique de cette magie ou est-ce juste un casse-tête pour les entretiens ?
Exemple de code, ko