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 相关文章推荐
flexigrid 参数说明
Nov 23 Javascript
jQuery Tools tooltip使用说明
Jul 14 Javascript
关于jQuery参考实例2.0 用jQuery选择元素
Apr 07 Javascript
给文字加上着重号的JS代码
Nov 12 Javascript
javascript匿名函数应用示例介绍
Mar 07 Javascript
JavaScript事件委托的技术原理探讨示例
Apr 17 Javascript
jQuery实现根据滚动条位置加载相应内容功能
Jul 18 Javascript
原生Javascript和jQuery做轮播图简单例子
Oct 11 Javascript
Easyui在treegrid添加控件的实现方法
Jun 23 Javascript
input file样式修改以及图片预览删除功能详细概括(推荐)
Aug 17 Javascript
JSON在Javascript中的使用(eval和JSON.parse的区别)详细解析
Sep 05 Javascript
JS实现的base64加密解密操作示例
Apr 18 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
php设计模式 Chain Of Responsibility (职责链模式)
2011/06/26 PHP
解决php表单重复提交实现方法
2015/09/29 PHP
老生常谈PHP数组函数array_merge(必看篇)
2017/05/25 PHP
不使用浏览器运行javascript代码的方法
2013/07/24 Javascript
JavaScript使用focus()设置焦点失败的解决方法
2014/09/03 Javascript
Javascript中this的用法详解
2014/09/22 Javascript
angularjs指令中的compile与link函数详解
2014/12/06 Javascript
jquery不常用方法汇总
2015/07/26 Javascript
jQuery过滤HTML标签并高亮显示关键字的方法
2015/08/07 Javascript
jQuery基础的工厂函数以及定时器的经典实例分析
2016/05/20 Javascript
JavaScript手机振动API
2016/06/11 Javascript
通过JS获取Request.QueryString()参数的值实现方法
2016/09/27 Javascript
JS动态的把左边列表添加到右边的实现代码(可上下移动)
2016/11/17 Javascript
根据Bootstrap Paginator改写的js分页插件
2016/12/25 Javascript
Nodejs连接mysql并实现增、删、改、查操作的方法详解
2018/01/04 NodeJs
微信小程序scroll-x失效的完美解决方法
2018/07/18 Javascript
浅谈layui 表单元素的选中问题
2019/10/25 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
2020/07/20 Javascript
Python调用C++程序的方法详解
2017/01/24 Python
老生常谈Python序列化和反序列化
2017/06/28 Python
浅谈Python NLP入门教程
2017/12/25 Python
Python获取二维矩阵每列最大值的方法
2018/04/03 Python
实例介绍Python中整型
2019/02/11 Python
Python+pyplot绘制带文本标注的柱状图方法
2019/07/08 Python
Python日期格式和字符串格式相互转换的方法
2020/02/18 Python
Python实现CAN报文转换工具教程
2020/05/05 Python
python 指定源路径来解决import问题的操作
2021/03/04 Python
canvas探照灯效果的示例代码
2018/11/30 HTML / CSS
FILA斐乐中国官方商城:意大利运动品牌
2017/01/25 全球购物
世界上最大的曲棍球商店:Pro Hockey Life
2017/10/30 全球购物
汉森冲浪板:Hansen Surfboards
2018/05/19 全球购物
技术学校毕业生求职信分享
2013/12/02 职场文书
计算机科学与技术专业求职信
2014/09/03 职场文书
女性健康知识讲座主持词
2015/07/04 职场文书
留学文书中的个人陈述,应该注意哪些问题?
2019/08/23 职场文书
Python socket如何解析HTTP请求内容
2022/02/12 Python