JavaScript で (a== 1 && a ==2 && a==3) 真実になることはできますか?
この複雑なインタビューこの質問は、JavaScript の等価演算子 (==) の理解を問うものです。質問は、式 (a== 1 && a ==2 && a==3) を true と評価させることができるかどうかを尋ねます。
a が 3 に等しくないため、一見すると不可能に思えます。異なる値を同時に。ただし、JavaScript の == 演算子の柔軟な性質を利用する巧妙なトリックがあります。
JavaScript では、== は型強制を実行するため、予期しない値の比較が可能になります。カスタム toString() または valueOf() 関数を使用してオブジェクトを定義すると、オブジェクトを数値と比較するときに返される値を操作できます。
たとえば、次のコードを考えてみましょう:
const a = {
i: 1,
toString: function () {
return a.i ;
}
};
if(a == 1 && a == 2 && a == 3) {
console.log('Hello World!');
}
ここで、オブジェクト a には、1 に初期化されたプロパティ i があります。その toString() 関数は、i をインクリメントしてその値を返すように定義されており、比較するたびにオブジェクトの表現が事実上変更されます。
最初に a が 1 と比較されると、i は 2 に増分されます。2 回目の比較では、i は再び 3 に増分され、等価条件が満たされます。最後に、3 回目の比較では、i は 4 に増分されますが、型強制により 3 に戻され、一致します。
したがって、JavaScript の柔軟な等価演算子を利用してカスタム オブジェクトを定義すると、確かに、式 (a== 1 && a ==2 && a==3) を満たすことができ、true と評価されます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3