parseInt第二个参数详解
前阵子在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第二个参数详解的更多相关文章
- jQuery()方法的第二个参数详解
关于jQuery()方法的第二个参数,有下面这几种用法: 1.jQuery(selector, [context]) 这种用法,相当于 $(context).find(selector) 或者 con ...
- iptables参数详解
iptables参数详解 搬运工:尹正杰 注:此片文章来源于linux社区. Iptalbes 是用来设置.维护和检查Linux内核的IP包过滤规则的. 可以定义不同的表,每个表都包含几个内部的链,也 ...
- mha配置参数详解
mha配置参数详解: 参数名字 是否必须 参数作用域 默认值 示例 hostname Yes Local Only - hostname=mysql_server1, hostname=192.168 ...
- 【转】jqGrid 各种参数 详解
[原文]http://www.cnblogs.com/younggun/archive/2012/08/27/2657922.htmljqGrid 各种参数 详解 JQGrid JQGrid是一个 ...
- Linux 之 编译器 gcc/g++参数详解
2016年12月9日16:48:53 ----------------------------- 内容目录: [介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++ ...
- cat常用参数详解
cat常用参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 最近,我的一个朋友对linux特别感兴趣,于是我觉得每天交给他一个命令的使用,这样一个月下来也会使用30个命令,基 ...
- [转]GCC参数详解
[介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件[预处理器cpp] 2.将预处理后的文件不转换成 ...
- scons用户指南翻译(附gcc/g++参数详解)
scons用户指南 翻译 http://blog.csdn.net/andyelvis/article/category/948141 官网文档 http://www.scons.org/docume ...
- GCC参数详解
GCC参数详解 [介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件 2.将预处理后的文件不转换成汇 ...
随机推荐
- 公网IP、私网IP
公网.内网是两种Internet的接入方式.公网接入方式:上网的计算机得到的IP地址是Internet上的非保留地址,公网的计算机和Internet上的其他计算机可随意互相访问. NAT(Networ ...
- IOS实现中间凸起圆形TabBar
中间凸起的圆形TabBar曾经比较流行,类似于闲鱼之类的APP就使用了中间凸起TabBar,这两天自己动手实现了一个,效果图如下: 大致原理:重写UITabBar和UITabBarController ...
- coreseek 提示 client version is higher than daemon version 解决办法
安装好coreseek,开启了服务之后,通过 sphinx php扩展去请求数据,提示:client version is higher than daemon version (client is ...
- 详解shape标签
转载自:http://blog.csdn.net/harvic880925/article/details/41850723 一.简单使用 刚开始,就先不讲一堆标签的意义及用法,先简单看看shape标 ...
- nginx rewrite重写与防盗链配置
nginx rewrite重写规则与防盗链配置方法 时间:2016-02-04 15:16:58来源:网络 导读:nginx rewrite重写规则与防盗链配置方法,rewrite规则格式中flag标 ...
- Maven进价:Maven的安装和目录结构
一.在windows上安装Maven 1.下载 下载地址:http://maven.apache.org/download.html 下载最新版本 maven3.2.5 2.解压 解压地址:F:\Ja ...
- 使用的 SQL Server 版本不支持数据类型“datetime2”的错误解决方法
THE VERSION OF SQL IN USE DOES NOT SUPPORT DATATYPE ‘DATETIME2′ 主要错误原因,在使用ado.net entity的时候,entity使用 ...
- Keypress – 超强大!捕获键盘输入的 JavaScript 库
Keypress 是一个强大的 JavaScript 库,用于捕获键盘输入.这是一个有非常特殊的功能的输入捕获库,它是很容易掌握和使用,并且不依赖第三方库.在网站开发中,经常会碰到需要处理键盘输入的场 ...
- iOS-沙盒路径总结、文件管理NSFileManager总结
// // ViewController.m // 沙盒操作 // // Created by mncong on 15/11/26. // Copyright © 2015年 mancong ...
- android resources使用总结
http://developer.android.com/guide/topics/resources/more-resources.html http://developer.android.com ...