1. ホーム
  2. javascript

[解決済み] (a== 1 && a ==2 && a==3) が真に評価されることはあるのでしょうか?

2022-03-14 12:56:04

質問

モデレーターの注意 コードを編集したり、この通知を削除したい衝動にかられるのを我慢してください。空白のパターンは問題の一部かもしれないので、むやみにいじってはいけません。もしあなたが「空白は重要ではない」派であれば、このコードをそのまま受け入れることができるはずです。

ということはないのでしょうか? (a== 1 && a ==2 && a==3) を評価することができます。 true をJavaScriptで表示できますか?

大手技術系企業で聞かれた面接の質問です。2週間前に起こったことなのですが、まだ答えを見つけられずにいます。日常業務でそのようなコードを書くことはないとは思いますが、気になりますね。

どのように解決するのですか?

を活用すれば どのように == 作品 を使用すれば、単にオブジェクトを作成し、カスタム toString (または valueOf ) 関数で、3つの条件を満たすように、使用するたびに返す内容を変更します。

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

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


これがうまくいくのは、緩やかな等号演算子を使用しているためです。緩やかな等式を使用する場合、オペランドの一方が他方とは異なる型であれば、エンジンは一方を他方に変換しようと試みます。左側にオブジェクト、右側に数値がある場合、エンジンはオブジェクトを数値に変換しようと、まず valueOf を呼び出し、それが失敗した場合は toString . 私は toString この場合は、単に思いついたからです。 valueOf の方が理にかなっていると思います。もし私が代わりに toString この場合、エンジンはこの文字列を数値に変換しようとするので、最終結果は同じになりますが、経路は若干長くなります。