Js内置函数之parseInt

Posted by Codeboy on June 26, 2020

前言

将一个字符串转化为数值是很经常的操作,但是你真的了解Js中的 parseInt 吗?先看几个例子:

parseInt("123"); // 123
parseInt("12,3"); // 12
parseInt(1/0); // NaN
parseInt("123", 8); // 83
parseInt("012"); // 12
parseInt(012); // 10
parseInt(1/0, 18); // NaN
parseInt(1/0, 19); // 18
parseInt("", 19); // NaN

全部答对了么?

基础

parseInt(string, radix)

  • string

    必需,要被解析的字符串。

  • radix

    可选,表示要解析的数字的基数。该值介于 2 ~ 36 之间,如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。

解释

上述示例中比较疑惑的点有两处,这里分别做下分析:

1. parseInt(“12,3”)

12,3 中含有不能被转化的字符,所以到 ,时截止,parseInt("12,3") 即等效于 parseInt("12") ,结果是12;

2. parseInt(“012”) 和 parseInt(012)

parseInt 的第一个参数是字符串,所以当参数是非字符串类型时,将会进行转化,012是8进制,表示的数字是10,转换为字符串时是”10”,所以 parseInt(012)=10;

当省略第二个参数时,转化过程按照10进制进行,所以 parseInt("012") 中的0将没有作用,结果是12;

3. parseInt(1/0, 18) 和 parseInt(1/0, 19)

首先 1/0=Infinity, 而 字母I是19进制的最后一个字符(0-9A-I),所以parseInt(1/0, 18) 等效于 parseInt(""), 结果为NaN, ` parseInt(1/0, 19) 等效于 parseInt(“I”)`, 结果为18;

小结

Js中的 parseInt 和Java等其他语言中不太相同,允许转换的字符串中含有不符合转换规则的字符,遇到不符合条件的字符结束,parseFloat 类似,使用中需要特别注意。

如有任何知识产权、版权问题或理论错误,还请指正。

转载请注明原作者及以上信息。