前言
将一个字符串转化为数值是很经常的操作,但是你真的了解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
类似,使用中需要特别注意。
如有任何知识产权、版权问题或理论错误,还请指正。
转载请注明原作者及以上信息。