在JavaScript里 (a ==1 && a== 2 && a==3) 有可能是 true 嗎?


ps:今天看到這個有趣的問題,跟大家分享下

一個有趣的問題:

在 JavaScript 中, (a ==1 && a== 2 && a==3) 是否有可能為 true ?

這個問題是一個小伙伴在面試時被問到,我想了很久。測試了下,然后偷偷去看了個答案,原來還不止一種方式為 true。

大家是否覺得有趣呢?有趣就往下看咯。

解法一:

利用松散相等運算符 == 的工作原理,你可以簡單地創建一個帶有自定義toString( 或者 valueOf)函數的對象,在每一次使用它時候改變它所的返回值,使其滿足所有三個條件。

const a = {
  i: 1,
  toString: function () {
    return a.i++;
  }
}
if(a == 1 && a == 2 && a == 3) {
  console.log('Hello World!');
}
View Code

解法二:

用下划線方式進行定義變量a,這也是我能想到的一種方式。解法一時通過看小伙伴答案找到的。

var a_ = 1;
var a = 2;
var _a = 3;
if(a_==1 && a== 2 &&_a==3) {
    console.log("Why hello there!")
}
View Code

接下來可能還有更多解法,期待你的回答更加精彩,讓人拍案叫絕。也讓我學習學習。

總結

1. 利用松散相等運算符 == 的原理,自定義 toString 和 valueOf 返回對應值

2. 利用半寬度韓文下划線等特殊字符,玩“障眼法”,本質上其實並沒有做到題設

 

最后,打個廣告吧,就是有個關於web的q群:557529704,大家有興趣可以加入一起學習。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM