前端常見bug系列4:JavaScript中忘記型別轉換所導致的條件判斷錯誤舉例

pai_an發表於2016-12-05

一、忘記型別轉換的小數比較錯誤

舉個例子,我們要進行一個字串型的小數的比較:`8.8`>`8.7`,結果自然是true。

那麼`8.8`>`8.10`呢?結果仍然是true,但願你沒有將它誤以為是8.8>8.10

二、忘記型別轉換的版本號比較錯誤

類似上面的問題,在進行版本號比較時,一樣存在。比如,我們這麼比較`8.8.1`>`8.10.1`,結果就是錯誤的。合理的比較方法應該是將兩個待比較的版本號按`.`作為分隔符進行拆分,並將每一位轉換成數字,然後按位比較。

三、字串型的`true`,`false`條件判斷時導致的錯誤

來看這個語句:

if(`false`) console.log(1);

此時你很可能是希望該條件判斷為false,而實際上它卻是true。這樣直接寫出來相信每個人都不會弄錯,問題在於上面這個語句中的`false`,往往是經過諸多計算後得到的一個結果,或者是來自於介面的某個資料項,在這些諸多的表面現象掩蓋之下的字元型`false`,有時很容易被疏忽。

類似這樣的容易出現錯誤的語句還有:

if(`0`) console.log(1);
if(`undefined`) console.log(1);
var a;
if(typeof a) console.log(1);

諸如此類,不一而足。類似這種條件判斷語句,在程式碼中再常見不過,而且往往是業務邏輯執行與否的判斷開關,一旦出現判斷錯誤,則整個分支的執行都是錯誤的,影響相當嚴重。如果類似上述的錯誤語句出現在基礎工具方法中,影響的面還將更大。所以,可得長點心了!


相關文章