不久前在网上看到一个这样的提问:
有没有可能使 a == 1 && a == 2 && a == 3 的结果为 true ???
其实,大部分语言在特定情况下都是可以做到类似逻辑的。譬如 C#,C++ 等语言可以通过重载运算符来自定义的判断逻辑实现,JavaScript 等语言由于其 == 运算符的特殊性,可以直接重写其方法来实现。
以 JavaScript 语言为例:
javascript 语言的 === 运算符相当于大多数其他运算符的 == 运算符,反而,其 == 运算符由于忽略变量类型,实际上, == 运算符是先调用 === 运算符判断,为 false 时,再依次调用 valueOf 方法,toString 方法进行判断。
所以,只需要简单的重写 valueOf 方法或者 toString 方法即可达到目的
var a = {i:1,
toString(){
return a.i ++;
}
}
console.log(a == 1 && a == 2 && a == 3);
运行结果: