写在前面
先动动脑筋,做一下题目: ['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两个参数的规则,一定要清楚; - 不管工作还是面试,不要粗心。