由于 Number() 函数在转换字符串时比较复杂而且不够合理,因此在处理整数的时候更常用的是 parseInt() 函数。parseInt() 函数在转换字符串时,更多的是看其是否符合数值模式。它会忽略字符串前面的空格,直至找到第一个非空格字符。如果第一个字符不是数字字符或者负号,parseInt() 函数就会返回 NaN;也就是说,用 parseInt() 函数转换空字符串会返回 NaN(不同的是 Number() 函数对空字符串转换会返回 0)。如果第一个字符是数字字符,parseInt() 函数会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符。例如,“1234blue” 会被转换为 1234,因为 “blue” 会被完全忽略。类似地,“22.5”会被转换为 22,因为小数点并不是有效的整数字符。
如果字符串中的第一个字符是数字字符,parseInt() 也能够识别出各种整数格式(即前面讨论的十进制、八进制和十六进制数)。
parseInt 支持第二个参数(基数),用于指示使用什么进制进行解析,不指定基数意味着让 parseInt 决定如何解析输入的字符串,我们建议无论在什么情况下都明确地指出基数,以避免出现不必要的麻烦。
下面是一些例子:
var num = parseInt("1234blue");
console.log("parseInt \"1234blue\" to\t", num);
num = parseInt("");
console.log("parseInt \"\" to\t", num);
num = parseInt("0xA");
console.log("parseInt \"0xA\" to\t", num);
num = parseInt("22.5");
console.log("parseInt \"22.5\" to\t", num);
num = parseInt("070");
console.log("parseInt \"070\" to\t", num);
num = parseInt("70");
console.log("parseInt \"70\" to\t", num);
num = parseInt("0xf");
console.log("parseInt \"0xf\" to\t", num);
num = parseInt("0xAF", 16);
console.log("parseInt \"0xAF\" to\t", num);
num = parseInt("AF", 16);
console.log("parseInt \"AF\" to\t", num);
num = parseInt("AF");
console.log("parseInt \"AF\" to\t", num);
num = parseInt("10", 2);
console.log("parseInt \"10\" to\t", num);
num = parseInt("10", 8);
console.log("parseInt \"10\" to\t", num);
num = parseInt("10", 10);
console.log("parseInt \"10\" to\t", num);
num = parseInt("10", 16);
console.log("parseInt \"10\" to\t", num);
输出效果: