小编典典

(a == 1 && a == 2 && a == 3)可以评估为真吗?

javascript

想要改善这篇文章吗? 提供此问题的详细答案,包括引文和答案正确的解释。答案不够详细的答案可能会被编辑或删除。

主持人注意:
请不要编辑代码或删除此声明。空格模式可能是问题的一部分,因此不应不必要地对其进行篡改。如果您处于“空白无关紧要”的阵营中,则应该能够原样接受代码。

有可能用JavaScript (a== 1 && a ==2 && a==3)评估true吗?

这是一家大型科技公司提出的面试问题。它发生在两周前,但我仍在努力寻找答案。我知道我们从不在日常工作中编写此类代码,但我很好奇。


阅读 368

收藏
2020-04-25

共1个答案

小编典典

如果你趁如何==工作,你可以简单地创建一个自定义的对象toString(或valueOf改变它使用它,使得它满足所有这三个条件,每次返回)功能。

const a = {

  i: 1,

  toString: function () {

    return a.i++;

  }

}



if(a == 1 && a == 2 && a == 3) {

  console.log('Hello World!');

}

之所以起作用,是因为使用了松散的相等运算符。使用宽松相等时,如果其中一个操作数的类型不同于另一个,则引擎将尝试将一个转换为另一个。如果对象在左侧,数字在右侧,则它将尝试通过首先调用对象(valueOf如果可调用)将其转换为数字,否则将调用toStringtoString在这种情况下,我之所以使用它,仅仅是因为它浮现在脑海中,才valueOf更有意义。如果我改为从返回一个字符串toString,则引擎将尝试将该字符串转换为一个数字,使我们得到相同的最终结果,尽管路径略长。

2020-04-25