javascript由「5」 >= "10"返回true引發的思考

衆所周知,js是弱類型的語言。所以在一些不注意的地方容易犯錯誤。在此記錄一下前幾天寫代碼的時候,判斷兩個值相比較的結果來進行下一步的操做。經過ajax獲得這兩個值,是字符串類型的數字,很顯然返回以前已經toString()了。當時作比較的時候我也沒有多想,我覺得這兩個值會自動轉換成number類型來比較,結果就悲劇了。
代碼以下html

if(a>=b){
    ....
}
//實際執行結果是

if("5">="10"){
    ....
}
//結果值是 true

發現這個bug後,我立刻更新了代碼進行了to number操做,其實也很簡單,對於明確的由number to string的值,只要進行 a = a*1;這樣的操做就能夠了。ajax

疑問來了

雖然bug很快就被解決了,可是我卻陷入了思考,爲何"5">"10"呢?測試

開始實驗、猜想

我又測試了"5">"6","5">"11"等等,而後發現了規律,這兩個值比較是依賴於字符串的第一個值的大小。
接下來我又驗證了英文字母、漢字之間的相互比較,很快就有了猜想方向,極可能是根據ASCII值來進行比較的。而後就下班溜了。。。code

證明

今天查了一下資料,講的很清楚小議js下字符串比較大小htm

一句話歸納就是按照字典序進行對比。blog

反思

  1. 雖然寫的是弱類型的js,可是在有明確類型的狀況下,最好仍是轉換成對應的類型進行比較。
  2. 早點上TypeScript的車吧
  3. 誰有TypeScript + React 相關資料麻煩分享一下,謝謝啦
相關文章
相關標籤/搜索