不久前在網上看到一個這樣的提問:
有沒有可能使 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);
運行結果: