parseInt
1 | console.log(['1','2','3'].map(parseInt)) // -> [1,NaN,NaN] |
这答案和直觉挺有出入的,奥妙在parseInt上
首先,Array.prototype.map为数组的每一项都调用方法,返回值相当于
1 | [ |
map还接收第二个参数thisArg,它会被用作执行回调时的this值
parseInt不仅接受一个字符串string作为第一参数,还接收第二个参数radix作为进制,取值为2~36整数
对于parseInt('1',0)
,遵循这样的规则:
如果radix是undefined、0或未指定
如果string以0x或0X开头,则以16进制解析字符串
如果string以0开头,则以10进制解析字符串
这是ES标准,但并非所有浏览器这么支持,取决于浏览器具体实现
如果string以其他任何值开头,则以10进制解析字符串
因此,parseInt('1',0)
会以十进制解析’1’,结果是1
对于parseInt('2',1)
,遵循这样的规则:
- 如果radix超出2~16的范围且不是0,则返回NaN
因此,parseInt('2',1)
会返回NaN
对于parseInt('3',2)
,遵循这样的规则:
- 如果string的第一个字符不能转换为数字,则返回 NaN
在二进制中不存在数字3,因此,parseInt('3',2)
会返回NaN
评论