ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript では (a == 1 && a == 2 && a == 3) が True になることはありますか?

JavaScript では (a == 1 && a == 2 && a == 3) が True になることはありますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-03 00:37:29975ブラウズ

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

JavaScript で (a== 1 && a ==2 && a==3) は True になれるでしょうか?

この不可解なインタビューこの質問は、JavaScript の等価演算子 (==) の理解を問うものです。質問は、式 (a== 1 && a ==2 && a==3) を true と評価させることが可能かどうかを尋ねます。

a が 3 に等しくないため、一見すると不可能に思えます。異なる値を同時に。ただし、JavaScript の == 演算子の柔軟な性質を利用する巧妙なトリックがあります。

JavaScript では、== は型強制を実行するため、予期しない値の比較が可能になります。カスタム toString() または valueOf() 関数を使用してオブジェクトを定義すると、オブジェクトを数値と比較するときに返される値を操作できます。

たとえば、次のコードを考えてみましょう:

<code class="javascript">const a = {
  i: 1,
  toString: function () {
    return a.i++;
  }
};

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

ここで、オブジェクト a には、1 に初期化されたプロパティ i があります。その toString() 関数は、i をインクリメントしてその値を返すように定義されており、比較するたびにオブジェクトの表現が事実上変更されます。

a が最初のとき1 と比較すると、i は 2 に増分されます。2 番目の比較では、i は再び 3 に増分され、等価条件が満たされます。最後に、3 回目の比較では、i は 4 に増分されますが、型強制により 3 に戻され、一致します。

したがって、JavaScript の柔軟な等価演算子を利用し、カスタム オブジェクトを定義することで、確かに、式 (a== 1 && a ==2 && a==3) を満たすことができ、true と評価されます。

以上がJavaScript では (a == 1 && a == 2 && a == 3) が True になることはありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。