矛盾する条件で論理交差は True と評価できますか?
有名なテクノロジー企業が提起した興味深い面接の質問で、次のような質問が生じます。 JavaScript で式 (a == 1 && a == 2 && a == 3) が true と評価されることはありますか?
最初は、一見矛盾した条件の性質を考えると、これは信じられないように思えるかもしれません。しかし、JavaScript の等価演算子 (==) の複雑さを深く掘り下げることで、この謎を解く道が見えてきます。
JavaScript の等価演算子は、厳密に等しいもの (===) とは異なり、型強制を自動的に実行します。比較のために値を共通の型に変換します。これにより、特にカスタマイズされた toString (または valueOf) 関数を使用したオブジェクトの操作への扉が開き、動的な値の生成が可能になります。
次の例を考えてみましょう。
const a = { i: 1, toString: function () { return a.i++; } }
このカスタムを使用した場合toString 関数では、a が暗黙的に文字列に強制されるたびに (ログ記録などのために)、a の内部 i 値が増加します。これにより、次の 3 つの等価条件をすべて満たすメカニズムが提供されます。
a == 1 // true (initially i = 1) a == 2 // true (after toString call, i = 2) a == 3 // true (after second toString call, i = 3)
したがって、オブジェクトの動的動作と == の暗黙的な型変換を活用することで、式 (a == 1 &&) が可能になります。 a == 2 && a == 3) JavaScript で true と評価されます。
以上がJavaScript の `==` 演算子は、矛盾した条件でも真の評価を作成できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。