说说parseInt()

217 阅读2分钟
最近碰到一道题,可能很多小伙伴们都遇到过,不卖关子直接上题目
["1", "2", "3"].map(parseInt) // 大家来说说返回的结果是什么
咋一看我还以为是[1,2,3]呢(原谅我的无知),然后把结果打印出来(一脸懵逼),人家的执行结果明明是[1, NaN, NaN]。为什么呢?本人也是看了好些文档才总算把它弄明白,请跟着我一起来一探究竟吧。
1) parseInt() 函数能解析一个字符串,并返回一个整数,需要两个参数 (val, radix), 是的、你没有听错就是接受两个参数,只不过我们平时把第二个参数给省略了。val: 就不用解释了,就是你想传入的那个值,radix: 基数(进制数会更好理解一些)它的范围为2-36 即:二进制到三十六进制。
当parseInt(val)只传一个参数时,相当于parseInt(val,0),会把val当成一个十进制数来解析,并对其进行取整。
2) 告诉我这么多有什么用,跟本题有关系吗? 那是当然的了,请看一下代码:
parseInt(1010, 2)  //返回结果是 10,将一个二进制数 1010转化成了十进制数10
parseInt(10, 8)  //返回结果是 8, 将一个八进制数10转化成了十进制8
parseInt('b', 16)  // 返回结果是 11, 将一个十六进制数'b'转化成了十进制11
相信你已经大概明白了parseInt(val, radix)中的两个参数。那接下来我们在来看看我们的题目:
["1", "2", "3"].map(parseInt) // map的回调接收两个参数(ele, index)
// 当然我们可以将我们的题目理解成下面的代码
["1", "2", "3"].map(function parseInt (ele, index) { })
// ele 等价于 val
// index 等价于 radix
// 把中间的每个元素和下标提出来理解就成了
parseInt(1, 0) // 等价于parseInt(1) 结果就是 1
parseInt(2, 1) // 等价于要将一进制的2转化成十进制,显然是不存在的所以是NaN
parseInt(3, 2) // 等价于要将二进制的3转化成十进制,当然二进制中也是没有3的,所以也是NaN
现在你肯定迫不及待的想要来一段代码来测试一下
["1", "0", "0"].map(parseInt) // 没错就是 [1, NaN, 0]
// 你说不防多来点
['1','2','3','4','5','6','7','8','9','10']map(parseInt)
// val:     1  2   3   4   5   6   7   8   9    10
// radix:   0  1   2   3   4   5   6   7   8    9
// result:  1 NaN NaN NaN NaN NaN NaN NaN NaN   9
// 记住哦九进制的10转化成十进制可不就是9么
好了,今天就到这里吧,我得滚回去敲代码了。