本文已参与「新人创作礼」活动,一起开启掘金创作之路。
最开始接触parseInt()就只是用它来取整,直到后来。。。害~ 是我大材小用了😢。下面,就来看看它到底是怎么回事,至此也有我自己的一些疑惑,渴望得到大佬们的解答~👀
parseInt(string, radix) 参数
-
string 参数为必须要传的字符串
-
radix 为可选参数。
表示要解析的数字的基数,该值介于2到36之间。
如果要省略这个参数或这个参数值为0,则数字就以10作为基数来解析。
如果它以“0x”或“0X”开头,将以16作为基数进行解析。
如果该数值小于2或大于36,则解析结果为NaN。
返回值为解析后的数字。
当只有第一个参数时
parseInt()运行机制从第一个非空字符串开始转换(开头和结尾的空格是允许的)。
① 如果string不是数字字符、加号或者减号则返回NaN,空字符串的情况也会返回NaN。
let jx1 = parseInt('hhh'); // NaN
let jx2 = parseInt(''); // NaN
② 如果string是数值字符、加号或减号也是依次检查字符至末尾,或者碰到非数值字符。
let jx1 = parseInt('123hhh'); // 123
let jx2 = parseInt('12.9'); // 12
③ 如果string是数值字符且以“0x”或“0X”开头则会被解释为十六进制整数。
let jx1 = parseInt('0xA'); // 10
let jx2 = parseInt('0Xf'); // 15
④ 如果string是数字字符且以0开头,则其后字符在非严格模式下可能被解释为八进制或十六进制的数字。
⑤ 如果string是数字字符且以1~9开头,则会被解释为十进制整数。
出现第二个参数时
其中radix并不代表进制只是要解释数字的基数。
根据上面的规则让我们来看些好玩的~
parseInt('10'): 默认基数radix为10,string为数字开头,则解释为十进制整数。
运算规则:parseInt('10') =
parseInt('10', 2) : 基数为2,string为数字且符合二进制规则,则解释为二进制整数。
运算规则:parseInt('10', 2) =
parseInt('1f', 16) : 解释为16进制,基数为16。
运算规则:parseInt('1f', 16) = (f:15)
parseInt('17', 6):1 属于6进制范围,7不属于6进制范围,当解析到某一位大于radix的string时它就只会解析到他的上一位,所以parseInt('17', 6) = parseInt('1', 6) = 1
parseInt('17', 9):基数为9,string为数字开头,解释为9进制整数,1和7都属于9进制范围。
运算规则:parseInt('17', 9) =
当然如果需要一个严格的方法来解析整形值(不允许出现非数字)这里就贴一个官方的代码
filterInt = function (value) {
if(/^(\-|\+)?([0-9]+|Infinity)$/.test(value))
return Number(value);
return NaN;
}
console.log(filterInt('421')); // 421
console.log(filterInt('-421')); // -421
console.log(filterInt('+421')); // 421
console.log(filterInt('Infinity')); // Infinity
console.log(filterInt('421e+0')); // NaN
console.log(filterInt('421hop')); // NaN
console.log(filterInt('hop1.61803398875')); // NaN
console.log(filterInt('1.61803398875')); // NaN
好了,到此就是有关parseInt()的一些相关知识,我的疑问是有关第二个参数的问题,在红宝书第四版的37页明确写出了是“用于指定底数(进制数)”,后来网上查阅相关资料就有所出入,现在有些懵懵的~ 有木有大神来科普一下捏~🤞