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实现输入框获取焦点消失文字
Apr 27 Javascript
JavaScript计算字符串中每个字符出现次数的小例子
Jul 02 Javascript
jquery实现导航固定顶部的效果仿蘑菇街
Oct 22 Javascript
JS+CSS相对定位实现的下拉菜单
Oct 06 Javascript
JS实现网页标题随机显示名人名言的方法
Nov 03 Javascript
jquery中ajax处理跨域的三大方式
Jan 05 Javascript
D3.js实现饼状图的方法详解
Sep 21 Javascript
jQuery中animate的几种用法与注意事项
Dec 12 Javascript
jQuery Password Validation密码验证
Dec 30 Javascript
jQuery.form.js的使用详解
Jun 14 jQuery
关于axios不能使用Vue.use()浅析
Jan 12 Javascript
vue项目中使用scss的方法步骤
May 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
关于PHP中的Class的几点个人看法
2006/10/09 PHP
PHP计算数组中值的和与乘积的方法(array_sum与array_product函数)
2016/04/01 PHP
Jquery实现弹出层分享微博插件具备动画效果
2013/04/03 Javascript
使用js操作cookie的一点小收获分享
2013/09/03 Javascript
js加载之使用DOM方法动态加载Javascript文件
2013/11/08 Javascript
Jquery动态添加及删除页面节点元素示例代码
2014/06/16 Javascript
JavaScript通过事件代理高亮显示表格行的方法
2015/05/27 Javascript
详解AngularJS中ng-src指令的使用
2016/09/07 Javascript
如何实现星星评价(jquery.raty.js插件)
2016/12/21 Javascript
JS基于正则实现数字千分位用逗号分隔的方法
2017/06/16 Javascript
Vue父组件调用子组件事件方法
2018/02/23 Javascript
centos 上快速搭建ghost博客方法分享
2018/05/23 Javascript
Vue.js 图标选择组件实践详解
2018/12/03 Javascript
JS常用排序方法实例代码解析
2020/03/03 Javascript
Python实现嵌套列表及字典并按某一元素去重复功能示例
2017/11/30 Python
pyinstaller打包单个exe后无法执行错误的解决方法
2019/06/21 Python
pytorch+lstm实现的pos示例
2020/01/14 Python
python3 deque 双向队列创建与使用方法分析
2020/03/24 Python
ITK 实现多张图像转成单个nii.gz或mha文件案例
2020/07/01 Python
html5视频自动横过来自适应页面且点击播放功能的实现
2020/06/03 HTML / CSS
SmartBuyGlasses台湾:名牌眼镜,名牌太阳眼镜及隐形眼镜
2017/01/04 全球购物
18-35岁旅游团的全球领导者:Contiki
2017/02/08 全球购物
瑜伽服装品牌:露露柠檬(lululemon athletica)
2017/06/04 全球购物
Skyscanner波兰:廉价航班
2017/11/07 全球购物
美国宠物护理专家:Revival Animal Health
2020/01/05 全球购物
美国主要的特色咖啡和茶公司:Peet’s Coffee
2020/02/14 全球购物
会计辞职信范文
2014/01/15 职场文书
迟到检讨书500字
2014/02/05 职场文书
三好学生先进事迹材料
2014/08/28 职场文书
官僚主义现象查摆问题整改措施
2014/10/04 职场文书
李白故里导游词
2015/02/12 职场文书
工伤认定行政答辩状
2015/05/22 职场文书
golang DNS服务器的简单实现操作
2021/04/30 Golang
python中subplot大小的设置步骤
2021/06/28 Python
SpringBoot全局异常处理方案分享
2022/05/25 Java/Android
NoSQL优缺点与MongoDB数据库简介
2022/06/05 MongoDB