"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > (a == 1 && a == 2 && a == 3) peut-il être vrai en JavaScript ?

(a == 1 && a == 2 && a == 3) peut-il être vrai en JavaScript ?

Publié le 2024-11-08
Parcourir:929

Can (a == 1 && a == 2 && a == 3) Ever Be True in JavaScript?

Est-ce que (a== 1 && a ==2 && a==3) peut-il être vrai en JavaScript ?

Cette interview déroutante La question remet en question la compréhension de l'opérateur d'égalité de JavaScript (==). La question demande s'il est possible de rendre l'expression (a== 1 && a ==2 && a==3) vraie.

À première vue, cela semble impossible, car a ne peut pas être égal à trois valeurs distinctes simultanément. Cependant, une astuce astucieuse exploite la nature malléable de l'opérateur == de JavaScript.

En JavaScript, == effectue une coercition de type, ce qui permet des comparaisons de valeurs inattendues. En définissant un objet avec une fonction toString() ou valueOf() personnalisée, on peut manipuler la valeur renvoyée lors de la comparaison de l'objet à un nombre.

Par exemple, considérons le code suivant :

const a = {
  i: 1,
  toString: function () {
    return a.i  ;
  }
};

if(a == 1 && a == 2 && a == 3) {
  console.log('Hello World!');
}

Ici, l'objet a a une propriété i initialisée à 1. Sa fonction toString() est définie pour incrémenter i et renvoyer sa valeur, modifiant ainsi la représentation de l'objet à chaque comparaison.

Lorsque a est d'abord comparé à 1, i est incrémenté à 2. Dans la deuxième comparaison, i est à nouveau incrémenté à 3, satisfaisant la condition d'égalité. Enfin, dans la troisième comparaison, i est incrémenté à 4, mais la coercition de type le reconvertit en 3, ce qui entraîne une correspondance.

Ainsi, en tirant parti de l'opérateur d'égalité flexible de JavaScript et en définissant un objet personnalisé, il est en effet possible de satisfaire l'expression (a== 1 && a ==2 && a==3), la rendant vraie.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3