面试题目
[1, 2, 3].map(parseInt) 的结果是什么?
- A. [1.0, 2.0, 3.0]
- B. [1, 2, NaN]
- C. [1, NaN, NaN]
- D. [1, 2, 3]
答案解析:
这一题主要考察 map 和 parseInt 两个函数的用法
函数 map
map() 方法定义: 按照原始数组元素顺序依次处理元素, 然后返回一个新数组
array.map(function(item,index,array),this)
参数说明:
item: 必须, 当前处理的数组的值
index: 可选, 当前处理的值得索引
array: 可选, 当前处理的值所属于的数组对象
this: 可选. 对象作为该执行回调时使用, 传递给函数, 用作 "this" 的值. 如果省略了 thisValue ,"this" 的值为 "undefined".
例子:
- var numbers=[1,2,3,4,5,6];
- numbers.map(function(item,index){
- console.log(item+"-"+index);
- })
image
parseInt() 函数的定义用法和参数
parseInt() 函数可解析一个字符串, 并返回一个整数.
parseInt(string, radix)
string 必需. 要被解析的字符串.
radix 可选.
radix 参数情况比较复杂, 具体规则如下:
表示要解析的数字的基数. 该值介于 2 ~ 36 之间.
如果该参数为 0, 则将以 10 为基础来解析 string.
如果该参数小于 2 或者大于 36, 则 parseInt() 将返回 NaN.
如果省略该参数, JavaScript 默认数字的基数如下:
如果 string 以 "0x" 开头, parseInt() 会把 string 的其余部分解析为十六进制的整数.
如果字符串 string 以 "0" 开头, 基数是 8(八进制) 或者 10(十进制), 那么具体是哪个基数由实现环境决定. ECMAScript 5 规定使用 10, 但是并不是所有的浏览器都遵循这个规定. 因此, 永远都要明确给出 radix 参数的值.
如果字符串 string 以其它任何值开头, 则基数是 10 (十进制).
如果第一个字符不能被转换成数字, parseInt 返回 NaN.
综上, 题目就可以改写为:
[1, 2, 3].map(parseInt) 等价于 [parseInt(1, 0), parseInt(2, 1), parseInt(3, 2)]
- parseInt(1, 0)
- // radix 为 0, 默认以十进制解析字符串, 返回 1
- parseInt(2, 1)
- // radix 为 1, 不在 2 ~ 36 之间, 返回 NaN
- parseInt(3, 2)
- // radix 为 2, 字符串却为 3, 超出二进制的表示范围, 因此要解析的字符串和基数矛盾, 返回 NaN
补充示例:
- parseInt("10");
- parseInt("19",10); // 19 (10+9)
- parseInt("11",2); // 3 (2+1)
- parseInt("17",8); // 15 (8+7)
- parseInt("1f",16); // 31 (16+15)
- parseInt("010"); // 10 或 8
来源: http://www.jianshu.com/p/25ea5e8433d6