javascript parseInt() 函数的进制转换注意细节


Posted in Javascript onJanuary 08, 2013

parseInt(string, radix) 有2个参数,第一个string 是传入的数值,第二个radix是 传入数值的进制,参数radix 可以忽略,默认为 10,各种进制的数转换为 十进制整数(如果不是整数,向下取整)。

radix 的取值范围是 2~36,如果 radix 为 1 或 radix>36 ,转换结果将是 NaN ,如果 radix 为 0 或其它值将被忽略,radix 默认为 10 。

该函数要求第一个参数是字符串,如果不是字符串将被转换成字符串,而且,在进行转换之前,字符串参数的左侧符合进制数所使用字符集的字符被截取出来用于进制数的转换。
字符串参数开头和结尾的空格会被忽略。

parseInt(param,radix) 相当于 parseInt(String(param).trim(),radix)
例如, parseInt(010) // 8,处理过程是

010 --> 8 //0 开头,八进制数 
8 --> '8' 
parseInt('8') //忽略 radix ,传入的 第一个参数 被识别为 10进制数

parseInt(0x10) // parseInt(16) 得到十进制16 
parseInt(010,16) // parseInt('8',16) ,得到 8 
parseInt(010,7) // parseInt('8',7) , 8 超出 7 进制数所使用字符的范围被丢弃,转换结果为 NaN 
parseInt(0x10,8) // parseInt('16',8) 得到 14 
parseInt(0x13,8) // parseInt('19',8) 字符 9 超出了8进制数所使用字符的范围,被丢弃,转换结果为 1

如果第一个参数直接传入 字符串,忽略 radix ,则:
字符串以 0 开头,默认被识别为 8 进制( IE 9 识别为 10进制,ie 6-8 识别为 8 进制 )
字符串以 0x 开头,默认被识别为 16 进制
否则识别为 10进制
parseInt('010') //8 ,ie9 得到 10 
parseInt('018') //1 ,ie9 得到 18 
parseInt('017') //15 , ,ie9 得到 15 
parseInt('010',8) //直接识别为8进制 ,转换结果 8 
parseInt('010',7) //直接识别为7进制 ,转换结果 7 
parseInt('010',16) //直接识别为16进制 ,转换结果 16 
parseInt('0x10') //16 
parseInt('0x1g') //1 
parseInt('0x1f') //31 
parseInt('0x10',8) //直接识别为8进制 ,字符 x 超出 8进制数所使用字符的范围,转换结果 0 
parseInt('0x10',15) // 转换结果 0 
parseInt('0x10',16) // 0x 符合 16进制数的表达格式,被正确识别为 16 进制数,转换结果同 parseInt('10',16) 为 16 
parseInt('0x10',17) // 识别为17进制,字符 x 超出 17进制数所使用字符的范围,转换结果 0 
parseInt(true) //NaN ,注意区别 布尔型在 Number 函数中的用法, Number(true) //1

需要特别注意的
1/0 // Infinity
Infinity.toString() // 'Infinity'
于是,坑爹的来了:
parseInt(1/0,18) // NaN 
parseInt(1/0,19) //18

因为 字符 i 在 19 进制数使用的字符集内,字符n 及后面的被丢弃
parseInt(1/0,19) 实际为 parseInt('i',19)
另外还有
parseInt(NaN,36) // 30191

因为 字符 n 在 36 进制中相当于 十进制 23,a 相当于十进制 10,于是有
23*36*36 + 10*36 + 23 = 30191
parseInt(1/0,36) // 1461559270678 ,实为 parseInt('Infinity',36)
parseFloat 是没有进制参数的,只能处理10进制数。
parseFloat.length //1
Javascript 相关文章推荐
javascript 操作cookies及正确使用cookies的属性
Oct 15 Javascript
JavaScript 对象模型 执行模型
Dec 06 Javascript
jQuery :nth-child前有无空格的区别分析
Jul 11 Javascript
js使用循环清空某个div中的input标签值
Sep 29 Javascript
快速学习jQuery插件 jquery.validate.js表单验证插件使用方法
Dec 01 Javascript
JavaScript统计字符串中每个字符出现次数完整实例
Jan 28 Javascript
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
May 18 Javascript
详解Angular如何正确的操作DOM
Jul 06 Javascript
JavaScript防止全局变量污染的方法总结
Aug 02 Javascript
原生JS实现简单的无缝自动轮播效果
Sep 26 Javascript
微信小程序后端实现授权登录
Feb 24 Javascript
JS pushlet XMLAdapter适配器用法案例解析
Oct 16 Javascript
Raphael一个用于在网页中绘制矢量图形的Javascript库
Jan 08 #Javascript
jquery插件珍藏(图片局部放大/信息提示框)
Jan 08 #Javascript
jquery Mobile入门—外部链接切换示例代码
Jan 08 #Javascript
jquery Moblie入门—hello world的示例代码学习
Jan 08 #Javascript
jquery Mobile入门—多页面切换示例学习
Jan 08 #Javascript
javascript 系统文件夹文件操作及参数介绍
Jan 08 #Javascript
12款经典的白富美型—jquery图片轮播插件—前端开发必备
Jan 08 #Javascript
You might like
文件上传程序的全部源码
2006/10/09 PHP
IIS环境下快速安装、配置和调试PHP5.2.0
2006/12/17 PHP
详解HTTP Cookie状态管理机制
2016/01/14 PHP
Thinkphp5.0自动生成模块及目录的方法详解
2017/04/17 PHP
PHP实现数据库的增删查改功能及完整代码
2018/04/18 PHP
PHP实现负载均衡的加权轮询方法分析
2018/08/22 PHP
YII框架模块化处理操作示例
2019/04/26 PHP
Yii Framework框架开发微信公众平台示例
2020/04/26 PHP
jQuery代码优化 事件委托篇
2011/11/01 Javascript
jquery设置按钮停顿3秒不可用
2014/03/07 Javascript
js实现获取div坐标的方法
2015/11/16 Javascript
修改js confirm alert 提示框文字的简单实例
2016/06/10 Javascript
用js实现博客打赏功能
2016/10/24 Javascript
8 行 Node.js 代码实现代理服务器
2016/12/05 Javascript
JS封装通过className获取元素的函数示例
2016/12/20 Javascript
layui表格checkbox选择全选样式及功能的实例
2018/03/07 Javascript
vue使用高德地图根据坐标定位点的实现代码
2019/08/22 Javascript
小程序调用微信支付的方法
2019/09/26 Javascript
使用python提取html文件中的特定数据的实现代码
2013/03/24 Python
Python3实现的腾讯微博自动发帖小工具
2013/11/11 Python
Django中实现点击图片链接强制直接下载的方法
2015/05/14 Python
Python检测字符串中是否包含某字符集合中的字符
2015/05/21 Python
Python sqlite3事务处理方法实例分析
2017/06/19 Python
tensorflow: 查看 tensor详细数值方法
2018/06/13 Python
python模块导入的方法
2019/10/24 Python
python如何求圆的面积
2020/07/01 Python
Python  word实现读取及导出代码解析
2020/07/09 Python
COS美国官网:知名服装品牌
2019/04/08 全球购物
Ellesse英国官网:意大利高级运动品牌
2019/07/23 全球购物
ParcelABC西班牙:包裹运送和快递服务
2019/12/24 全球购物
中学自我评价
2014/01/31 职场文书
铲车司机岗位职责
2014/03/15 职场文书
小学生作文批改评语
2014/12/25 职场文书
英语教师个人工作总结
2015/02/09 职场文书
MySQL连接查询你真的学会了吗?
2021/06/02 MySQL
mysql定时自动备份数据库的方法步骤
2021/07/07 MySQL