(a== 1 && a ==2 && a==3) が true と評価されることはありますか? 質問する

(a== 1 && a ==2 && a==3) が true と評価されることはありますか? 質問する

モデレーターのメモ:コードを編集したり、この通知を削除したりしないでください。空白のパターンは質問の一部である可能性があるため、不必要に改ざんしないでください。「空白は重要ではない」という立場であれば、コードをそのまま受け入れることができるはずです。

JavaScript で(a== 1 && a ==2 && a==3)が と評価されることはありますか?true

これは大手テクノロジー企業からの面接での質問です。2週間前に行われたことですが、私はまだ答えを見つけようとしています。私たちが日常業務でそのようなコードを書くことはないことはわかっていますが、興味があります。

ベストアンサー1

活用すれば仕組み==、 3 つの条件すべてを満たすように、使用されるたびに返される内容を変更するカスタムtoString(または) 関数を持つオブジェクトを作成するだけで済みます。valueOf

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

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


これが機能する理由は、緩い等価演算子を使用しているためです。緩い等価演算子を使用すると、オペランドの 1 つが他のオペランドと異なる型である場合、エンジンは一方を他方に変換しようとします。左側がオブジェクトで右側が数値の場合、最初に が呼び出し可能であれば を呼び出してオブジェクトを数値に変換しようvalueOfとし、それが失敗した場合は を呼び出しますtoStringtoStringこの場合 を使用したのは、単にそれが思い浮かんだものであり、valueOfより理にかなっているからです。代わりに から文字列を返すとtoString、エンジンは文字列を数値に変換しようとして、少し長いパスではありますが、同じ最終結果を返します。

おすすめ記事