Kann (a== 1 && a ==2 && a==3) in JavaScript jemals wahr sein?
Dieses verwirrende Interview Die Frage stellt das Verständnis des JavaScript-Gleichheitsoperators (==) in Frage. Bei der Frage geht es darum, ob es möglich ist, den Ausdruck (a== 1 && a ==2 && a==3) als wahr auszuwerten.
Auf den ersten Blick scheint es unmöglich, da a nicht gleich drei sein kann unterschiedliche Werte gleichzeitig. Ein cleverer Trick nutzt jedoch die formbare Natur des ==-Operators von JavaScript aus.
In JavaScript führt == eine Typerzwingung durch, die unerwartete Wertevergleiche ermöglicht. Durch Definieren eines Objekts mit einer benutzerdefinierten toString()- oder valueOf()-Funktion kann man den zurückgegebenen Wert manipulieren, wenn das Objekt mit einer Zahl verglichen wird.
Betrachten Sie beispielsweise den folgenden Code:
<code class="javascript">const a = { i: 1, toString: function () { return a.i++; } }; if(a == 1 && a == 2 && a == 3) { console.log('Hello World!'); }</code>
Hier hat das Objekt a eine Eigenschaft, die i auf 1 initialisiert hat. Seine toString()-Funktion ist so definiert, dass sie i inkrementiert und seinen Wert zurückgibt, wodurch die Darstellung des Objekts bei jedem Vergleich effektiv geändert wird.
Wenn a an erster Stelle steht Im Vergleich zu 1 wird i auf 2 erhöht. Im zweiten Vergleich wird i erneut auf 3 erhöht, wodurch die Gleichheitsbedingung erfüllt wird. Schließlich wird i im dritten Vergleich auf 4 erhöht, aber durch die Typerzwingung wird es wieder in 3 umgewandelt, was zu einer Übereinstimmung führt.
Wenn Sie also den flexiblen Gleichheitsoperator von JavaScript nutzen und ein benutzerdefiniertes Objekt definieren, wird es ist tatsächlich möglich, den Ausdruck (a== 1 && a ==2 && a==3) zu erfüllen, sodass er als wahr ausgewertet wird.
Das obige ist der detaillierte Inhalt vonKann (a == 1 && a == 2 && a == 3) jemals in JavaScript wahr sein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!