JavaScript parseInt()
parseInt方法可以將字串轉換為整數。
轉化需要遵循指定的規則,後面會通過程式碼例項詳細介紹。
首先看一段程式碼例項:
[JavaScript] 純文字檢視 複製程式碼執行程式碼console.log(parseInt("8"));
程式碼執行效果截圖如下:
上述程式碼利用parseInt方法將字元"8"轉換為數值8。
看起來此方法確實是非常簡單,很多初學者對它的瞭解可能也僅限於此。
但是如果深究起來,此方法的內容並不少,甚至對初學者造成一定的困擾。
程式碼例項如下:
[JavaScript] 純文字檢視 複製程式碼執行程式碼let num=0O50; console.log(parseInt(num,8));
程式碼執行效果截圖如下:
八進位制數字0O50經過parseInt方法轉換以後得到的結果是32。
這可能會迷惑一部分朋友,後面會對此專門分析。
語法結構:
[JavaScript] 純文字檢視 複製程式碼parseInt(str, radix)
引數解析:
(1).str:必需,要進行轉換的字串,如果不是字串會隱式將其轉換為字串。
(2).radix:可選,規定以何種進位制來解析str引數中的數字,值介於2-36之間,如果省略可能是十進位制也可能是其他進位制,後面會通過具體的程式碼例項詳細說明,建議始終填寫此引數。
特別說明:
(1).返回值是十進位制數字。
(2).ES2015之前,此方法屬於Global物件,但不能顯示使用Global物件呼叫(Global.parseInt())。
(2).ES2015將此方法歸屬於Number物件,靜態方法,功能與ES2015之前完全相同。
更多Global物件內容參閱JavaScript Global物件一章節。
瀏覽器相容:
(1).IE瀏覽器支援此方法。
(2).Edge瀏覽器支援此方法。
(3).谷歌瀏覽器支援此方法。
(4).火狐瀏覽器支援此方法。
(5).opera瀏覽器支援此方法。
(6).safria瀏覽器支援此方法。
程式碼例項如下:
[JavaScript] 純文字檢視 複製程式碼執行程式碼let str="17"; console.log(parseInt(str));
程式碼執行截圖如下:
省略第第二個引數,這時候它預設以十進位制解析前面的數字。
[JavaScript] 純文字檢視 複製程式碼執行程式碼let num=17; console.log(parseInt(num));
程式碼執行截圖如下:
如果引數是數字,那麼首先將其轉換為字串,然後再預設以十進位制解析前面的數字。
[JavaScript] 純文字檢視 複製程式碼執行程式碼let str=" 17"; console.log(parseInt(str));
程式碼執行截圖如下:
字串前面的空格是允許的,parseInt方法會將其忽略不計。
[JavaScript] 純文字檢視 複製程式碼執行程式碼let str="17ab88"; console.log(parseInt(str));
程式碼執行截圖如下:
如果字串並非全都是數字,那麼將從左到右擷取直到非radix進位制內字元位置。
比如上面的字串中,17都是十進位制範疇內的數字,字元a不是,所以最終結果為17。
[JavaScript] 純文字檢視 複製程式碼執行程式碼let str="0xF"; console.log(parseInt(str));
程式碼執行截圖如下:
如果字串是以0x起始,並且沒有規定第二個引數,那麼以十六進位制解析。
[JavaScript] 純文字檢視 複製程式碼執行程式碼let str="1011"; console.log(parseInt(str,2));
程式碼執行截圖如下:
規定以2進位制解析前面的數字字串。
[JavaScript] 純文字檢視 複製程式碼執行程式碼let str="1081"; console.log(parseInt(str,2));
程式碼執行截圖如下:
從起始位置開始擷取,一直到8,(不包括),因為8不在二進位制範疇之內。
下面回到文章開頭的問題,程式碼如下:
[JavaScript] 純文字檢視 複製程式碼執行程式碼let num=0O50; console.log(parseInt(num,8));
程式碼執行效果截圖如下:
分析如下:
(1).首先要將第一個引數轉換為字串。
(2).轉換成字串隱式呼叫toString方法,這裡要注意了,當前數字是八進位制,通過toString會將其轉換為十進位制形式,轉換結果為40,那麼可以認為程式碼變為parseInt("40", 8)。
(3).由於第二個引數是8,所以將40是八進位制數字解析,轉換結果就是32。
省略第二個引數時,對以0為起始的數字處理:
(1).ES5之前,如果省略第二個引數,那麼以0為起始的數字字串被預設為是八進位制數字。
(2).ES5規定,如果省略第二個引數,以0為起始的數字字串不再被認為是八進位制數字
[JavaScript] 純文字檢視 複製程式碼parseInt("027");
程式碼執行效果截圖如下:
可以看到數字字串以0起始,但是並沒有被當做八進位制解析。
[JavaScript] 純文字檢視 複製程式碼parseInt(027);
程式碼執行效果截圖如下:
為什麼上面的程式碼列印的是23呢。
這是因為雖然以0起始數字字串作為parseInt方法引數的時候,不被認作是八進位制。
但是在非parseInt方法引數的情況下,以0起始的數字,當前(2018-9-21)依然預設被當做八進位制數字,027首先要被轉換為字串"23",這時候以十進位制解析,自然列印23。
相關文章
- JavaScript Number()方法和ParseInt()/ParseFloat()方法的轉換機制JavaScript
- parseInt()瀏覽器相容瀏覽器
- JavaScript 資料型別轉換詳細解釋已經parseInt等JavaScript資料型別
- js parseInt()資料型別轉換JS資料型別
- JDK 原始碼 Integer解讀之一(parseInt)JDK原始碼
- 嚴格模式對parseInt()函式的影響模式函式
- parseInt 是用於字串,而不是用於數字字串
- 高頻網紅面試題['1','2','3'].map(parseInt) 原理解析面試題
- 前端面試題_06_parseInt與map遍歷組合題前端面試題
- js在Android的WebView中parseInt轉換不正確解決方法JSAndroidWebView
- 好程式設計師web前端培訓分享關於parseInt函式的一切程式設計師Web前端函式
- parseInt()方法在IE8和IE8以下瀏覽器的相容性問題瀏覽器
- Integer.valueof(String s)和Integer.parseInt(String s)的具體區別是什麼?
- 問個很次的問題,為什麼我在jsp裡的Integer下面找不到parseIntJS
- JavaScript高階:JavaScript物件導向,JavaScript內建物件,JavaScript BOM,JavaScript封裝JavaScript物件封裝
- javaScript系列[06]-javaScript和thisJavaScript
- 【JavaScript學習】JavaScript物件建立JavaScript物件
- 【轉】eval()函式(javascript) - [javaScript]函式JavaScript
- [Javascript] How javascript read the property?JavaScript
- JavaScript -"this"JavaScript
- javascript ??JavaScript
- This in JavaScriptJavaScript
- “This” is For JavaScriptJavaScript
- javascript thisJavaScript
- JavaScriptJavaScript
- javaScript系列[05]-javaScript和JSONJavaScriptJSON
- 44 道 JavaScript 難題(JavaScript Puzzlers!)JavaScript
- 【轉向JavaScript系列】AST in Modern JavaScriptJavaScriptAST
- javascript,還是javascript的問題JavaScript
- JavaScript 教程之JavaScript常用框架簡介JavaScript框架
- 《深入理解JavaScript》——2.3 JavaScript有用嗎JavaScript
- 【JavaScript】--JavaScript總結一覽無餘JavaScript
- 【HTML、JAVASCRIPT、CSS】3、Javascript基本概念HTMLJavaScriptCSS
- [Javascript] Understanding JavaScript Proxies with Symbol.toPrimitiveJavaScriptSymbolMIT
- JavaScript EventJavaScript
- JavaScript BackdoorJavaScript
- JavaScript normalize()JavaScriptORM
- JavaScript setDate()JavaScript