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获取对象简单实现方法小结
Oct 30 Javascript
jquery中push()的用法(数组添加元素)
Nov 25 Javascript
JavaScript给按钮绑定点击事件(onclick)的方法
Apr 07 Javascript
JS实现按比例缩放图片的方法(附C#版代码)
Dec 08 Javascript
JSON 对象未定义错误的解决方法
Sep 29 Javascript
Bootstrap3 Grid system原理及应用详解
Sep 30 Javascript
bootstrap jquery dataTable 异步ajax刷新表格数据的实现方法
Feb 10 Javascript
Vue中v-for的数据分组实例
Mar 07 Javascript
小程序数据通信方法大全(推荐)
Apr 15 Javascript
JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
Feb 03 Javascript
javascript实现下拉菜单效果
Feb 09 Javascript
vue的项目如何打包上线
Apr 13 Vue.js
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 smarty 二级分类代码和模版循环例子
2011/06/16 PHP
PHP中集成PayPal标准支付的实现方法分享
2012/02/06 PHP
深入Memcache的Session数据的多服务器共享详解
2013/06/13 PHP
php中使用array_filter()函数过滤空数组的实现代码
2014/08/19 PHP
PHP学习笔记(二):变量详解
2015/04/17 PHP
php中header设置常见文件类型的content-type
2015/06/23 PHP
Prototype 学习 工具函数学习($方法)
2009/07/12 Javascript
JS维吉尼亚密码算法实现代码
2010/11/09 Javascript
namespace.js Javascript的命名空间库
2011/10/11 Javascript
jquery手风琴特效插件
2015/02/04 Javascript
jQuery插件jFade实现鼠标经过的图片高亮其它变暗
2015/03/14 Javascript
基于Phantomjs生成PDF的实现方法
2016/11/07 Javascript
JavaScript数据结构学习之数组、栈与队列
2017/05/02 Javascript
vue事件修饰符和按键修饰符用法总结
2017/07/25 Javascript
详解Vue 中 extend 、component 、mixins 、extends 的区别
2017/12/20 Javascript
基于jQuery实现可编辑的表格
2019/12/11 jQuery
原生JS实现拖拽功能
2020/12/16 Javascript
[42:50]NB vs VP 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
在Python中操作文件之truncate()方法的使用教程
2015/05/25 Python
在Django的form中使用CSS进行设计的方法
2015/07/18 Python
Django Highcharts制作图表
2016/08/27 Python
详解Python中is和==的区别
2019/03/21 Python
python 非线性规划方式(scipy.optimize.minimize)
2020/02/11 Python
python应用Axes3D绘图(批量梯度下降算法)
2020/03/25 Python
Python文件读写w+和r+区别解析
2020/03/26 Python
python try...finally...的实现方法
2020/11/25 Python
ONLY瑞典官网:世界知名服装品牌
2018/06/19 全球购物
英国第一摩托车和摩托车越野配件商店:GhostBikes
2019/03/10 全球购物
高中三年学习生活的自我评价
2013/10/10 职场文书
电子信息专业学生自荐信
2013/11/09 职场文书
小学竞选班长演讲稿
2014/09/09 职场文书
警察正风肃纪剖析材料
2014/10/16 职场文书
员工工作及收入证明
2014/10/28 职场文书
小学运动会入场口号
2015/12/24 职场文书
2019年冬至:天冷暖人心的问候祝福语大全
2019/12/20 职场文书
Mysql表数据比较大情况下修改添加字段的方法实例
2022/06/28 MySQL