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 相关文章推荐
查询绑定数据岛的表格中的文本并修改显示方式的js代码
Dec 15 Javascript
jquery预加载图片的方法
May 27 Javascript
Jquery循环截取字符串的方法(多出的字符串处理成"...")
Nov 28 Javascript
深入理解Angularjs向指令传递数据双向绑定机制
Dec 31 Javascript
jQuery实现标签页效果实战(4)
Feb 08 Javascript
Angularjs自定义指令实现三级联动 选择地理位置
Feb 13 Javascript
浅谈 Vue v-model指令的实现原理
Jun 08 Javascript
vue项目实现记住密码到cookie功能示例(附源码)
Jan 31 Javascript
vue2.0页面前进刷新回退不刷新的实现方法
Jul 31 Javascript
Node.js Koa2使用JWT进行鉴权的方法示例
Aug 17 Javascript
Vue项目History模式404问题解决方法
Oct 31 Javascript
angular4实现带搜索的下拉框
Mar 25 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
rrmdir php中递归删除目录及目录下的文件
2011/05/15 PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
2014/01/31 PHP
php使用$_POST或$_SESSION[]向js函数传参
2014/09/16 PHP
php使用parse_url和parse_str解析URL
2015/02/22 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
jQuery EasyUI API 中文文档 搜索框
2011/09/29 Javascript
Jquery倒数计时按钮setTimeout的实例代码
2013/07/04 Javascript
js数组操作学习总结
2013/11/04 Javascript
js document.write()使用介绍
2014/02/21 Javascript
Javascript中的delete操作符详细介绍
2014/06/06 Javascript
js实现简单的可切换选项卡效果
2015/04/10 Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
2015/05/09 Javascript
jQuery实现调整表格单列顺序完整实例
2016/06/20 Javascript
JavaScript读二进制文件并用ajax传输二进制流的方法
2016/07/18 Javascript
一道面试题引发的对javascript类型转换的思考
2017/03/06 Javascript
五步轻松实现zTree的使用
2017/11/01 Javascript
微信小程序自定义tabBar组件开发详解
2020/09/24 Javascript
Node.js EventEmmitter事件监听器用法实例分析
2019/01/07 Javascript
vue-router 中 meta的用法详解
2019/11/01 Javascript
vue页面更新patch的实现示例
2020/03/25 Javascript
[25:45]2018DOTA2亚洲邀请赛4.5SOLO赛 Sylar vs Paparazi
2018/04/06 DOTA
简单介绍Ruby中的CGI编程
2015/04/10 Python
Python实现将xml导入至excel
2015/11/20 Python
Python简单生成8位随机密码的方法
2017/05/24 Python
Python中对数组集进行按行打乱shuffle的方法
2018/11/08 Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
2020/02/28 Python
html5 canvas fillRect坐标和大小的问题解决方法
2014/03/26 HTML / CSS
在职人员函授期间自我评价分享
2013/11/08 职场文书
大二自我鉴定
2014/01/31 职场文书
2014年党员公开承诺践诺书
2014/03/25 职场文书
2015年八一建军节活动总结
2015/03/20 职场文书
《1942》观后感
2015/06/08 职场文书
原来闭幕词是这样写的呀!
2019/07/01 职场文书
pandas中DataFrame检测重复值的实现
2021/05/26 Python
mysql5.6主从搭建以及不同步问题详解
2021/12/04 MySQL