(== 1 && == 2 && == 3)真の値にする方法?

:この質問に対処https://github.com/YvetteLau/Step-By-Step/issues/9
==演算子の意志暗黙的な変換を。

  • オブジェクト
    メソッドのvalueOfとのtoStringによって==オペレータの試みは、その元の値(文字列型または数値の値)をオブジェクトに変換します。
  const a = {
    i: 1,
    // valueOf 也可达到相同效果
    toString: function () {
      return a.i++;
    }
  }
  a == 1 && a == 2 && a == 3; // true
  • 配列
    オブジェクトの配列のために、toStringメソッドのtoStringから文字列を返す配列の各要素は、()()メソッドコネクタ(カンマで区切られた)コンポーネントを結合呼び出すことによって値を返します。
  var a = [1,2,3];
  a.join = a.shift;
  a == 1 && a == 2 && a == 3; // true
  • シンボル
    シンボルオブジェクトが元の型の値たToPrimitiveメソッド呼び出しに変換され、対応するオブジェクトタイプの元の値を返します。
  let a = {
    [Symbol.toPrimitive]: ((i) => () => ++i) (0)
  };
  a == 1 && a == 2 && a == 3; // true

  • getメソッドウィンドウを変更します
  var val = 0;
  Object.defineProperty(window, 'a', {
    get: function() {
      return ++val;
    }
  });
  a == 1 && a == 2 && a == 3; // ture
  • キーワードを使用すると
    emmm ...めったに使われないようなキーワードで
  var i = 0;
  with({
    get a() {
      return ++i;
    }
  }) {
    a == 1 && a == 2 && a == 3; // true
  }

参考:

  1. 比較演算子
  2. オブジェクト.prototype .valueOf
  3. (== 1 && == 2 && == 3)暗黙的型変換から見確立するJavaScript
  4. 38件の質問:どのような状況でしょうプリント1の下に次のコード?

ます。https://www.jianshu.com/p/a74223e37e3bで再現

おすすめ

転載: blog.csdn.net/weixin_33796177/article/details/91263799