前阵子在stackOverflow上看到两个这样的问题:

为什么parseInt(8,3) == NaN,parseInt(16,3) == 1?

为什么parseInt('dsff66',16) == 13?

parseInt大家应该都很熟悉了,我们一般用他来把一个小数或字符串转换为整数,正常情况下我们都是这样做的:

parseInt(11.2)//返回11

parseInt(‘13’)//返回Number类型的13

函数会尝试逐个解析字符串中的字符,直到遇上一个无法被解析成数字的字符,然后返回该字符前所有数字字符组成的数字。

但是parseInt的第二个参数很多朋友就不太清楚了,因为本身就很少使用第二个参数,我们看看MDN上对第二个参数的解释:

一个2到36之间的整数值,用于指定转换中采用的基数。比如参数"10"表示使用我们通常使用的十进制数值系统。总是指定该参数可以消除阅读该代码时的困惑并且保证转换结果可预测。当忽略该参数时,不同的实现环境可能产生不同的结果。

最后说到如果忽略的话,不同环境会有不同结果,大家不用担心,ES5已经规定了如果省略就代表用十进制解析。

第二个参数是2~36之间的整数值,这个值其实就是我们说的进制,比如,我们用二进制去解析第一个参数,那么就这么做:

parseInt(101,2)//返回5

下面我们来分析一下上面的两个问题,相信大家对这第二个参数就能有个透彻的认识了。

为什么parseInt(8,3) == NaN,parseInt(16,3) == 1?

先来看第一个parseInt(8,3) ,这里的意思就是用,三进制去解析8,我们知道二进制是遇2进1,三进制同样,遇3进1,比如我要用三进表示十进制中的5,那么就是12,也就是(2*(3^0))+(1*(3^1))=5;

所以在三进制中,出现的最大的数字也就是2,8这个数字不可能出现在三进制中,所以返回NaN。

parseInt(16,3)同样,出现最大的数字是2,那么6就是被自动忽略掉,所以parseInt是直接用三进制去解析1,得到的当然是1了。

为什么parseInt('dsff66',16) == 13?

我们知道,平时使用parseInt,它会忽略到除数字之外的字符,但是这里不一样,因为十进制最大的数字是9,但是到了十一进制往上,最大的数字是两位数了,这当然不行,所以从10开始往上,就用字母代替,a==10,b==11......z==35;所以你知道为什么parseInt的第二个参数要规定在2~36了吗?

再看看上面这道问题,在16进制中,最大的数字是15,对应字母也就是f,超过f的字母也就超出了16进制的解析范围。

'dsff66'的第一个字符是d,也就是十进制中的13,第二个字符s,代表十进制中的28,这显然超出了16进制的解析范围,所以s和它之后的字符都会被parseInt自动忽略,所以我们得到13。

相信看到这里,你对parseInt的第二个参数已经完全了解了,如果你对进制之间的转换不太了解的话,可以多去网上学习学习进制之间的转换,就算平时用不着,还是可能拿来装X嘛。

另外补充一下,另一个函数parseFloat只接受一个参数,只能使用十进制去解析。

parseInt第二个参数详解的更多相关文章

  1. jQuery()方法的第二个参数详解

    关于jQuery()方法的第二个参数,有下面这几种用法: 1.jQuery(selector, [context]) 这种用法,相当于 $(context).find(selector) 或者 con ...

  2. iptables参数详解

    iptables参数详解 搬运工:尹正杰 注:此片文章来源于linux社区. Iptalbes 是用来设置.维护和检查Linux内核的IP包过滤规则的. 可以定义不同的表,每个表都包含几个内部的链,也 ...

  3. mha配置参数详解

    mha配置参数详解: 参数名字 是否必须 参数作用域 默认值 示例 hostname Yes Local Only - hostname=mysql_server1, hostname=192.168 ...

  4. 【转】jqGrid 各种参数 详解

      [原文]http://www.cnblogs.com/younggun/archive/2012/08/27/2657922.htmljqGrid 各种参数 详解 JQGrid JQGrid是一个 ...

  5. Linux 之 编译器 gcc/g++参数详解

    2016年12月9日16:48:53 ----------------------------- 内容目录: [介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++ ...

  6. cat常用参数详解

    cat常用参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 最近,我的一个朋友对linux特别感兴趣,于是我觉得每天交给他一个命令的使用,这样一个月下来也会使用30个命令,基 ...

  7. [转]GCC参数详解

    [介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件[预处理器cpp] 2.将预处理后的文件不转换成 ...

  8. scons用户指南翻译(附gcc/g++参数详解)

    scons用户指南 翻译 http://blog.csdn.net/andyelvis/article/category/948141 官网文档 http://www.scons.org/docume ...

  9. GCC参数详解

    GCC参数详解 [介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件 2.将预处理后的文件不转换成汇 ...

随机推荐

  1. sizeof and strlen整理

    sizeof 定义 计算对象或类型所占用的字节数(byte) 记住是字节数,而不是个数 语法 sizeof(对象) int i; sizeof(i); sizeof(类型) sizeof(int); ...

  2. 【Android学习】XML文本的三种解析方式(通过搭建本地的Web项目提供XML文件)

    XML为一种可扩展的标记语言,是一种简单的数据存储语言,使用一系列简单的标记来描述. 一.SAX解析 即Simple API for XML,以事件的形式通知程序,对Xml进行解析. 1.首先在Web ...

  3. Portal for ArcGIS上传shp文件中文乱码可能情况

    环境: windows Server 2008:Portal for ArcGIS 10.2:ArcGIS for Server 10.2:PostgreSQL 9.2:ArcGIS for Desk ...

  4. java io系列01之 "目录"

    java io 系列目录如下: 01. java io系列01之  "目录" 02. java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括 ...

  5. AngularJS 五大特性,加快 Web 应用开发

    AngularJS 是谷歌的一个 JavaScript 框架,旨在简化前端应用程序的开发.如果你在开发单页的应用程序,我敢肯定你已经听说过它.我是 AngularJS 的忠实粉丝,在这篇文章中我将概述 ...

  6. 谈Mysql索引

    myisam和innodb的索引有什么区别? 两个索引都是B+树索引,但是myisam的表存储和索引存储是分开的,索引存储中存放的是表的地址.而innodb表存储本身就是一个B+树,它是用主键来做B+ ...

  7. spring事务与消息队列

    在开发过程中,遇到一个bug,产生bug的原因是spring事务提交晚于消息队列的生产消息,导致消息队列消费消息时获取到的数据不正确.这篇文章介绍问题的产生和一步步的解决过程. 一.问题的产生: 场景 ...

  8. Array,List,Struct可能被大家忽略的问题

    Q1: 首先定义一个结构 public struct MyStruct { public int T; } 定义一个泛型List来存放结构体,然后访问第一个元素去修改T,输出T: List<My ...

  9. 数学 --- 高斯消元 POJ 1830

    开关问题 Problem's Link: http://poj.org/problem?id=1830 Mean: 略 analyse: 增广矩阵:con[i][j]:若操作j,i的状态改变则con[ ...

  10. Brute Force --- UVA 10167: Birthday Cake

     Problem G. Birthday Cake  Problem's Link:http://uva.onlinejudge.org/index.php?option=com_onlinejudg ...