Как сделать (а == 1 && A == 2 && A == 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 каждого элемента в массиве () Возвращает значение с помощью вызова метода Join) разъема ((разделенного запятой) компонентов.
  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
  • С использованием ключевых слов
    эммм ... с ключевыми словами , как редко
  var i = 0;
  with({
    get a() {
      return ++i;
    }
  }) {
    a == 1 && a == 2 && a == 3; // true
  }

Ссылка:

  1. операторы сравнения
  2. .prototype Объект .valueOf
  3. Создание Javascript видно из (A == 1 && A == 2 && A == 3) неявные преобразования типов
  4. 38 вопросов: следующий код при каких обстоятельствах печати 1?

Воспроизводится в: https: //www.jianshu.com/p/a74223e37e3b

рекомендация

отblog.csdn.net/weixin_33796177/article/details/91263799