Java 也有 Integer.parseInt() 方法, 但是 JavaScript 的 parseInt 處理方式與 Java 等強整型語言不太一樣, 所以經常有人因為對這個方法的使用不當而獲得異常返回.
下面是一段 Java 代碼, 用於將字符串 020 轉為整型.
復制代碼 代碼如下:
public class Test {
public static void main(String args[]) throws Exception {
String str = "020";
System.out.println(Integer.parseInt(str));
}
}
輸出結果是 20
下面是一段 JavaScript 代碼, 同樣是將字符串 020 轉為整型.
復制代碼 代碼如下:
var str = "020";
var num = parseInt(str);
alert(num);
輸出結果是 16
為什麼呢?
無論是 Java 還是 JavaScript, parseInt 方法都有兩個參數, 第一個參數就是要轉換的對象, 第二個參數是進制基數, 可以是 2, 8, 10, 16, 默認以 10 進制處理. 但在 JavaScript 中, 0 開始的數被認為使用 8 進制處理, 0x 的數被認為是用 16 進制來處理. 所以上面的 JavaScript 代碼計算錯誤了.
影響大嗎?
大! 很大! 因為這個經常用於計算價錢, 一旦價格錯誤, 對用戶來說, 這是誤導, 而一個好的網站不應該出現這種誤導用戶的. 下面的 DEMO 中, 沒有指定進制. 大家可以在數量框中輸入一個以 0 開頭的數字, 在點擊計算按鈕, 算出來的數值將比預想中的小一些, 或者小很多 (如: 8 進制中沒有 019 這樣的數值, 所以數值變成了 1, 9 被忽略掉).
沒有為 parseInt 函數指定進制的 DEMO
如何修改?
前面說過, 有兩個參數, 第二個參數可以指定計算使用的進制.
復制代碼 代碼如下:
parseInt(num, radix);
所以我們可以將前面有問題的那段 JavaScript 代碼改寫為下面的代碼.
復制代碼 代碼如下:
var str = "020";
var num = parseInt(str, 10);
alert(num);
這樣處理的話, 我們再重寫一些前面的 DEMO, 如下:
為 parseInt 函數指定進制為 10 的 DEMO
記住了, 在 JavaScript 上使用 parseInt 方法時要帶上進制參數.