JavaScript (a == 1 && a == 2 && a == 3) 可能为 true 吗?

简评:你以为这个题目是一个好的口试题吗?

在 JavaScript 中 (a ==1 && a== 2 && a==3) 能够为 true 吗?

这个题目是外洋一名求职者最近在口试一家大型科技公司时碰到的一个题目。

他的回复是「不能够」,而口试方说「nothing is impossible」,然后就没有然后了。

虽然在现实工作中能够没人会写如许的代码,但题主照样放不下,苦思冥想了两个星期,终究照样决定在 Stack Overflow 上追求解答。

人人能够先本身想想。

这里给一个最高赞的答案:

自定义 toString(或许 valueOf)要领,每次挪用转变一次返回值,从而满足推断前提。

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

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

当运用 == 时,假如两个参数的范例不一样,那末 JS 会尝试将其中一个的范例转换为和另一个雷同。在这里左侧对象,右侧数字的情况下,会首先尝试挪用 valueOf(假如能够挪用的话)来将对象转换为数字,假如失利,再挪用 toString。

实在,另有许多其他的完成,感兴趣的能够点击链接看看。

比方,我比较喜好这个:

with({
  get a() {
    return Math.floor(Math.random()*4);
  }
}){
  for(var i=0;i<1000;i++){
    if (a == 1 && a == 2 && a == 3){
      console.log("after "+(i+1)+" trials, it becomes true finally!!!");
      break;
    }
  }
}

题目:
Can (a ==1 && a== 2 && a==3) ever evaluate to true? reddit

议论:
Javascript: Can (a ==1 && a== 2 && a==3) ever evaluate to true? r/programming

    原文作者:极光推送
    原文地址: https://segmentfault.com/a/1190000013318865
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞