今天在群里無意中看到了這樣一個問題,突然發現不會,結果運行一看,懵逼了,不知道為什么???(結果是啥?自己去試試看)
現在我們還是先來復習一下parseInt()這個知識點吧!
parseInt() 函數可解析一個字符串,並返回一個整數。
當參數 radix 的值為 0,或沒有設置該參數時,parseInt() 會根據 string 來判斷數字的基數。
當忽略參數 radix , JavaScript 默認數字的基數如下:
如果 string 以 "0x" 開頭,parseInt() 會把 string 的其余部分解析為十六進制的整數
如果 string 以 0 開頭,那么 ECMAScript v3 允許 parseInt() 的一個實現把其后的字符解析為八進制或十六進制的數字。
如果 string 以 1 ~ 9 的數字開頭,parseInt() 將把它解析為十進制的整數。
提示和注釋
注意: 只有字符串中的第一個數字會被返回。
注意: 開頭和結尾的空格是允許的。
注意:如果字符串的第一個字符不能被轉換為數字,那么 parseFloat() 會返回 NaN。
注意:在字符串以"0"為開始時舊的瀏覽器默認使用八進制基數。ECMAScript 5,默認的是十進制的基數。
下面來看具體的實例吧:
下面再來一個稍微難點的:
很奇怪有木有,其實是這樣的,當小數點后的0的個數小於等於5個時,會采用字面量形式直接表示,當小數點后0的個數大於5個時,會采用科學計數法來表示,即:0.000005不會采用科學計數法,而0.0000005則會轉換為5e-7,parseInt方法不會將"e"視為數字,因此只是將5轉換為10進制,還是5。
同理,當小數點前數字位數為21及以下的時候,會采用字面量形式直接表示,而當小數點前數字位數大於21的時候。會采用科學計數法,因此6000000000000000000000會轉換為科學計數法,為6e+21,將6轉換為10進制還是6
為什么會這樣?其實是這樣的,第一個中,會將2進制的11轉換為10進制,自然就是3了。第二個中,會先將011按八進制來解析,就是9了,而二進制中不存在9,因此為NaN
至於第三個嘛,會將011按八進制解析為9,parseInt() 將把它解析為十進制的整數,自然就是9了
好了,就說到這里了,至於開篇講到的那個問題,我也不知道為什么???
這里再來一波,懵逼了有木有?自己解決去吧。