parseInt 函数详解
JavaScript 提供了 parseInt 函数,用于将字符串解析成指定进制的整数。它的语法如下:
parseInt(string, radix);
其中,string 是要解析的字符串,radix 是 2 到 36 之间的整数,表示 string 的进制。parseInt 函数会返回一个十进制整数。
如果 string 不是字符串类型,parseInt 会先调用 toString 方法将其转换为字符串,然后再进行解析。开头的空白字符会被忽略。
返回值
如果 string 能够被解析为整数,parseInt 就返回解析后的整数。否则返回 NaN。
需要注意的是,如果 string 的第一个字符不能被正常转换为数字,parseInt 也会返回 NaN。例如:
console.log(parseInt('11a2')); // 11
上面的例子中,'11a2'从左到右解析,遇到不能转换为数字的字符'a'就停止了,所以最终结果是 11。
进制转换
我们来看一个稍微复杂一点的例子:
console.log(parseInt('123', 5)); // 38
这行代码的意思是,将'123'看作 5 进制数,然后返回其对应的十进制值。
5 进制数 123 的计算方法是:
1 _ 5^2 + 2 _ 5^1 + 3 * 5^0 = 25 + 10 + 3 = 38
用 JavaScript 代码可以这样写:
1 * Math.pow(5, 2) + 2 * Math.pow(5, 1) + 3 * Math.pow(5, 0);
不符合 radix 的情况
如果 string 中包含了不符合 radix 进制的数字,parseInt 会从左到右解析,直到遇到不符合要求的字符,然后将前面解析的部分转换为十进制整数返回。例如:
console.log(parseInt('123', 2)); // 1
因为 2 进制只能包含 0 和 1,所以上面的代码实际上只解析了第一个字符'1',后面的'23'被直接忽略了。
进制转换的其他方法
除了用 parseInt 解析字符串为整数,我们还可以用 toString 方法将整数转换为其他进制的字符串。例如:
console.log((3).toString(2)); // '11'
这行代码将十进制整数 3 转换成了二进制字符串'11'。
严格过滤整数
如果我们想要严格过滤一个整数值,可以借助正则表达式:
function filterInt(value) {
if (/^(\-|\+)?(\d+|Infinity)$/.test(value)) {
return Number(value);
}
return NaN;
}
console.log(filterInt('123')); // 123
console.log(filterInt('123a')); // NaN
console.log(filterInt('a123')); // NaN
这个 filterInt 函数只有在 value 严格符合整数格式时才会返回整数值,其他情况一律返回 NaN。它的实现要点是:
使用^和$限定字符串的开头和结尾,只允许出现整数字符。 允许出现+和-符号,但必须在开头。 使用\d+匹配一或多个数字,同时也允许出现 Infinity。 最后用 Number 将字符串转换为数字类型。