写在前面
先动动脑筋,做一下题目: ['1','2','3'].map(parseInt)
我的思路: map
会把每一项的元素、索引、数组传给parseInt
,经过parseInt
返回一个整数,最终得到一个新数组 [1, 2, 3]
。
和你的答案一样吗?如果一样,那你要好好看看下面的文章了😂
parseInt语法与定义
用法
parseInt(string, radix); 具体语法参考w3school的解释
吐槽一下
先看看官网给出的例子
1 | parseInt("10"); //返回 10 |
当时我就想吐槽,既然给出了例子,敢不敢别这么有规律。比如可以列一下这些例子:
1 | parseInt("11", 2); //返回 3 (2+1) |
解释
下面看一下两个参数的解释:
参数string
- parseInt的第一个参数是
字符串
类型,当传入非字符串类型时,会先将其转换为字符串,如上例parseInt(0x11)
; - 字符串转整数时,是一个一个字符依次转换的,遇到不能转为数字的字符,就终止转换,返回已经转换好的部分,如
parseInt('14a5')
; - 当 string 里前含有空格,会先去除前面的空格,如
parseInt(' 122')
; - 放 string 里第一个字符不能转换为数字,则返回
NaN
,如parseInt(' ')
。
参数radix
- radix可以接受的范围是
2~36
,表示传入的字符串的进制,最终返回该值对应的十进制整数,如上例parseInt("11", 2)
; - 当传入其他数字时返回
NaN
; - 默认是10,当传入 0、 undefined、null、false或’’时,直接被忽略,如
parseInt("11", null)
。
再看几个例子
1 | parseInt(010); //返回 8 (parseInt('8')) |
现在重新看一下上面的题目,完整的书写方式:
1 | ['1','2','3'].map(function(value, index, array){ |
分步执行一下:
1 |
|
所以 ['1','2','3'].map(parseInt)
的正确答案是 [1, NaN, NaN]
。
收获
- 对于
parseInt
两个参数的规则,一定要清楚; - 不管工作还是面试,不要粗心。