parseInt 的一些怪异表现

parseInt 的第一个参数必须是字符串,如果不是字符串,它会先转成字符串后再处理,这会产生一些怪异表现

示例

parseInt(1/0, 19) // 18

第一个参数计算结果为 Infinity,转换为字符串后为 “Infinity”,第二个参数指明传入的数为 19 进制,在 19 进制中 I 代表 18,所以 parseInt 解析到 I 后就打印了 18,后面的不会解析了,因为 n 不在 19 进制内

当然,直接 parseInt(Infinity, 19) 是不行的,它会打印 NaN

其他类似的示例

parseInt(0.000008) // 0 ("0" 来自于 "0.000008")
parseInt(0.0000008) // 8 ("8" 来自于 "8e-7")
parseInt(false, 16) // 250 ("fa" 来自于 "false")
parseInt(parseInt, 16) // 15 ("f" 来自于 "function..")

parseInt( "0x10" ) // 16 (字符串识别为十六进制)
parseInt( "103", 2 ) // 2 (字符串只解析到 10)

借用《你不知道的JavaScript(中卷)》书中的一句话:

其实 parseInt(..) 函数是十分靠谱的,只要使用得当就不会有问题。因为使用不当而导致一些莫名其妙的结果,并不能归咎于 JavaScript 本身

除特殊说明外本人博客均属原创,转载请注明出处:http://blog.johnhan.cn/blog_1079.html
京ICP备19044523号-1