如何让 (a == 1 && a == 2 && a == 3)

2019-05-24  本文已影响0人  李轻舟

本题地址: https://github.com/YvetteLau/Step-By-Step/issues/9
== 运算符会进行隐式转换。

  const a = {
    i: 1,
    // valueOf 也可达到相同效果
    toString: function () {
      return a.i++;
    }
  }
  a == 1 && a == 2 && a == 3; // true
  var a = [1,2,3];
  a.join = a.shift;
  a == 1 && a == 2 && a == 3; // true
  let a = {
    [Symbol.toPrimitive]: ((i) => () => ++i) (0)
  };
  a == 1 && a == 2 && a == 3; // true

  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. Object​.prototype​.valueOf
  3. 从 (a==1&&a==2&&a==3) 成立中看javascript的隐式类型转换
  4. 第 38 题:下面代码中 a 在什么情况下会打印 1?
上一篇 下一篇

猜你喜欢

热点阅读