跳到主要内容

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 将字符串转换为数字类型。