深入了解parseInt
2012-09-22 23:11
106 查看
有这样一道题目
为什么结果是这样?什么情况下返回NAN?
因为parseInt需要两个参数(val,radix),map传递了3个参数(elem,index,arr)。
如果想让parseInt(string,radix)返回NaN,有两种情况:
第1个参数不能转换成数字;
第2个参数不在2到36之间。
这里,我们猜测是第二种情况,重新定义parseInt(string,radix)函数试试。
看见map方法确实向parseInt传递了三个参数,数组的值,索引,数组。
["1", "2", "3"]中的索引为0,1,2,如果1作为parseInt方法的第二个参数值,肯定有问题,因为不在2到36之间,所以返回NAN。2作为parseInt方法的第二个参数值,没有问题,但是字符串"3"里面没有合法的二进制数,所以也返回NAN。谜题最终揭晓,下面做一个扩展。
["1", "2", "3"].map(parseInt); //[1, NaN, NaN]
为什么结果是这样?什么情况下返回NAN?
因为parseInt需要两个参数(val,radix),map传递了3个参数(elem,index,arr)。
如果想让parseInt(string,radix)返回NaN,有两种情况:
第1个参数不能转换成数字;
第2个参数不在2到36之间。
这里,我们猜测是第二种情况,重新定义parseInt(string,radix)函数试试。
//传递两个参数时 var parseInt = function(string, radix) { return string + "-" + radix; }; ["1", "2", "3"].map(parseInt); //["1-0", "2-1", "3-2"]
//传递三个参数时 var parseInt = function(string, radix, obj) { return string + "-" + radix + "-" + obj; }; ["1", "2", "3"].map(parseInt);//["1-0-1,2,3", "2-1-1,2,3", "3-2-1,2,3"]
//传递四个参数时 var parseInt = function(string, radix, obj, other) { return string + "-" + radix + "-" + obj + "-" + other; }; ["1", "2", "3"].map(parseInt); //["1-0-1,2,3-undefined", "2-1-1,2,3-undefined", "3-2-1,2,3-undefined"]
看见map方法确实向parseInt传递了三个参数,数组的值,索引,数组。
["1", "2", "3"]中的索引为0,1,2,如果1作为parseInt方法的第二个参数值,肯定有问题,因为不在2到36之间,所以返回NAN。2作为parseInt方法的第二个参数值,没有问题,但是字符串"3"里面没有合法的二进制数,所以也返回NAN。谜题最终揭晓,下面做一个扩展。
["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16"].map(parseInt);
//[1, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 9, 11, 13, 15, 17, 19, 21]
parseInt("1", 0); // 基数为0,默认10进制,返回1 parseInt("2", 1); // 基数为1,不在2-36范围内,默认输出NaN parseInt("3", 2); // 基数为2,因为字符串3大于基数不合法,解析为NaN parseInt("4", 3); // 三进制 parseInt("5", 4); parseInt("6", 5); parseInt("7", 6); parseInt("8", 7); parseInt("9", 8); parseInt("10", 9); // 九进制 (1*9+0 = 9) parseInt("11", 10); // 十进制 (1*10+1 = 11) parseInt("12", 11); parseInt("13", 12); parseInt("14", 13); parseInt("15", 14); parseInt("16", 15);
相关文章推荐
- 深入了解java集群技术
- d3js enter/exit深入了解
- Android视图绘制流程完全解析,带你一步步深入了解View(二)
- 如何深入的了解RBW
- Android 进阶学习:Android视图绘制流程完全解析,带你一步步深入了解View(二)
- 《深入了解Android:Wi-Fi、NFC和GPS音量》勘误表
- Android LayoutInflater原理分析,带你一步步深入了解View(一)
- 深入了解网络蠕虫
- 深入了解.net类在内存中的结构以及安全线程同步
- 深入了解 gRPC:协议
- Windows深入了解故障恢复控制台2--安装及启动
- 深入理解Objective-C:Protocol(略带了解预编译)
- redis深入了解(一)
- Redis-Sampler:深入了解你的Redis存储
- 【阅读】《Head First HTML 与 CSS》 第二章——深入了解超文本
- 深入了解View实现原理以及自定义View详解
- 设计模式系列17---深入了解的访问者模式设计模式系列17---深入了解的访问者模式
- 深入了解网卡
- Android视图状态及重绘流程分析,带你一步步深入了解View(三)
- 深入了解Canvas标签(4)——运用样式与颜色