天天看點

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

舉個例子,我們要進行一個字元串型的小數的比較:<code>'8.8'&gt;'8.7'</code>,結果自然是true。

那麼<code>'8.8'&gt;'8.10'</code>呢?結果仍然是true,但願你沒有将它誤以為是<code>8.8&gt;8.10</code>。

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

來看這個語句:

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

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

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

繼續閱讀