如何使a == 1 && a== 2 && a == 3?

在网上看到一道有意思的面试题,问何种情况下a == 1 && a== 2 && a == 3,看起来不可思议,实则还是有门路可循的。
比如很明显此题使用了 == 而不是 === 全等,这就给我们开放了解题的入口,我们发散一下思维,也就是相等号左右两边值相等,类型可以不一样。
第一种思路:
       稍作变形也就是'1' == 1 && '2' == 2 && '3' == 3。
第二种思路:
       不作变形也就是1 == 1 && 2 == 2 && 3 == 3。
接着,我们可以考虑真正的问题,那什么时候一个变量可以“同时"等于不同的值呢。这个“同时“其实也不是真正意义上的‘同时’,这个语句其实是一个顺序执行的过程,也就是第一次等于1,第二次等于2,第三次等于3。这个a也就是一个普通原始数据,原始数据本身似乎没有什么特殊属性,那我们可以联想到Javascript的valueOf方法,平时都是对象自己调用的,我们是否可以在这上面做文章呢?答案是肯定的,我们可以自定义相关方法覆盖原方法。
1 var a = {
2    value: [3, 2, 1],
3    valueOf: function () {
4       return this.value.pop()
5    } 
6 }
7 console.log(a == 1 && a== 2 && a == 3) // true
这样就完成了,是不是很简单呢?
当然这个方法有一定的局限性,比如第一次返回tue,后面执行就变成false了,大家有更好的方法建议可以提出来一起讨论哦
 
原文地址:https://www.cnblogs.com/july-Vivian/p/15409829.html