モデレーターのメモ:コードを編集したり、この通知を削除したりしないでください。空白のパターンは質問の一部である可能性があるため、不必要に改ざんしないでください。「空白は重要ではない」という立場であれば、コードをそのまま受け入れることができるはずです。
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
とし、それが失敗した場合は を呼び出しますtoString
。toString
この場合 を使用したのは、単にそれが思い浮かんだものであり、valueOf
より理にかなっているからです。代わりに から文字列を返すとtoString
、エンジンは文字列を数値に変換しようとして、少し長いパスではありますが、同じ最終結果を返します。