Maison > Article > interface Web > L'opérateur `==` de JavaScript peut-il créer de véritables évaluations avec des conditions contradictoires ?
Les intersections logiques peuvent-elles être évaluées comme étant vraies dans des conditions conflictuelles ?
Dans une question d'entretien intrigante posée par une entreprise technologique renommée, la question se pose : l'expression (a == 1 && a == 2 && a == 3) peut-elle jamais être évaluée comme vraie en JavaScript ?
Au départ, cela peut sembler invraisemblable étant donné la nature apparemment contradictoire des conditions. Cependant, en approfondissant les subtilités de l'opérateur d'égalité de JavaScript (==), une voie émerge pour répondre à cette énigme.
L'opérateur d'égalité de JavaScript, contrairement à son homologue strictement égal (===), effectue automatiquement une coercition de type. convertir des valeurs en un type commun à des fins de comparaison. Cela ouvre la porte à la manipulation d'objets, notamment avec des fonctions toString (ou valueOf) personnalisées, qui permettent de générer des valeurs dynamiques.
Considérons l'exemple suivant :
const a = { i: 1, toString: function () { return a.i++; } }
Avec cette personnalisation toString, chaque fois que a est implicitement contraint à une chaîne (par exemple, pour la journalisation), la valeur i interne de a s'incrémente. Cela fournit un mécanisme pour satisfaire les trois conditions d'égalité :
a == 1 // true (initially i = 1) a == 2 // true (after toString call, i = 2) a == 3 // true (after second toString call, i = 3)
Ainsi, en tirant parti du comportement dynamique des objets et de la conversion de type implicite de ==, il devient possible pour l'expression (a == 1 && a == 2 && a == 3) pour évaluer true 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!