【问题标题】:Can (a===b && a!==b) evaluate to true?(a===b && a!==b) 可以评估为真吗?
【发布时间】:2018-02-28 04:56:51
【问题描述】:

有没有办法让 (a===b && a!==b) 评估为真?

我认为答案是否定的,但我觉得这可能是一个诡计。

【问题讨论】:

  • 用现实生活中的例子来解释需要它的地方?
  • 他们让你进入类型强制的思维模式,但即使是 JS 也不会产生true。用一些具体的类型来测试它。
  • @Learnonhardway 竞争条件怎么样,有没有办法让代码不一次全部执行,使它成为假?或者这在 JS 中是不可能的?
  • 很可能是你误解了问题,这是一个诡计问题,或者面试官没有资格提出问题。我倾向于第三个选项。
  • 其实,你或许应该质疑一个在这样的问题上浪费宝贵面试时间的团队。

标签: javascript ecmascript-6


【解决方案1】:

var i = 0;
var j = 0;

with({
  get a() {
    return i++;
  },
  get b() {
    return j;
  }
}) {
  if (a === b && a !== b)
    console.log("it is work");
}

【讨论】:

    【解决方案2】:

    勾选此项,它仅适用于==,不适用于===

    var a = {
        x: 1,
        toString: function () {
            return this.x++;
        }
    }
    var b = 1;
    
    console.log('Result', (a == b && a != b));
    
    // Another option
    
    var j = {
        x: 1,
        valueOf: function () {
            return this.x++;
        }
    }
    var k = 1;
    
    console.log('Result', (j == k && j != k));

    【讨论】:

      【解决方案3】:

      事实证明,它可以评估为真,但前提是你使用 with

      with({
        get a() {
          return Math.floor(Math.random() * 2);
        },
        get b() {
          return Math.floor(Math.random() * 2);
        }
      }) {
        // 25% change of logging true
        console.log(a === b && a !== b);
      }

      【讨论】:

        猜你喜欢
        • 2019-12-28
        • 1970-01-01
        • 2023-04-04
        • 1970-01-01
        • 2013-11-19
        • 1970-01-01
        • 2018-07-01
        • 2021-04-03
        • 1970-01-01
        相关资源
        最近更新 更多