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 相关文章推荐
基于Jquery的仿照flash放大图片效果代码
Mar 16 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
Feb 22 Javascript
JavaScript基本类型值-Number类型
Feb 24 Javascript
表格展示利器 Bootstrap Table实例代码
Sep 06 Javascript
浅谈Angular HttpClient简单入门
May 04 Javascript
jQuery中元素选择器(element)简单用法示例
May 14 jQuery
vue 中swiper的使用教程
May 22 Javascript
小程序实现悬浮搜索框
Jul 12 Javascript
javascript跳转与返回和刷新页面的实例代码
Nov 20 Javascript
解决Angularjs异步操作后台请求用$q.all排列先后顺序问题
Nov 29 Javascript
Electron整合React使用搭建开发环境的步骤详解
Jun 07 Javascript
在Vue中使用Select选择器拼接label的操作
Oct 22 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
phpfans留言版用到的数据操作类和分页类
2007/01/04 PHP
PHP 代码规范小结
2012/03/08 PHP
Laravel 5框架学习之日期,Mutator 和 Scope
2015/04/08 PHP
Yii2框架中使用PHPExcel导出Excel文件的示例
2017/08/09 PHP
PHP实现的AES加密、解密封装类与用法示例
2018/08/02 PHP
jMessageBox 基于jQuery的窗口插件
2009/12/09 Javascript
锋利的jQuery jQuery中的DOM操作
2010/03/21 Javascript
使用jQuery UI的tooltip函数修饰title属性的气泡悬浮框
2013/06/24 Javascript
require.js深入了解 require.js特性介绍
2014/09/04 Javascript
使用jquery动态加载js文件的方法
2014/12/24 Javascript
一系列Bootstrap导航条使用方法分享
2016/04/29 Javascript
AngularJs Understanding the Model Component
2016/09/02 Javascript
微信小程序 Flex布局详解
2016/10/09 Javascript
jquery uploadify隐藏上传进度的实现方法
2017/02/06 Javascript
Vue实现选择城市功能
2017/05/27 Javascript
详解vue-meta如何让你更优雅的管理头部标签
2018/01/18 Javascript
详解Javascript中new()到底做了些什么?
2018/03/29 Javascript
[43:57]Liquid vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
[04:54]DOTA2-DPC中国联赛1月31日Recap集锦
2021/03/11 DOTA
python实现下载文件的三种方法
2017/02/09 Python
Python之Web框架Django项目搭建全过程
2017/05/02 Python
Python3 模块、包调用&路径详解
2017/10/25 Python
Python 中的Selenium异常处理实例代码
2018/05/03 Python
Python3多进程 multiprocessing 模块实例详解
2018/06/11 Python
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
2019/03/26 Python
python中的数组赋值与拷贝的区别详解
2019/11/26 Python
Python 脚本的三种执行方式小结
2019/12/21 Python
Python使用Paramiko控制liunx第三方库
2020/05/20 Python
Python命名空间namespace及作用域原理解析
2020/06/05 Python
基于canvas使用贝塞尔曲线平滑拟合折线段的方法
2018/01/10 HTML / CSS
城野医生官方海外旗舰店:风靡亚洲毛孔收敛水
2018/04/26 全球购物
机关党员四风问题个人整改措施
2014/10/26 职场文书
个人典型事迹材料
2014/12/30 职场文书
放弃继承权公证书
2015/01/23 职场文书
事业单位个人总结
2015/02/12 职场文书