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 学习笔记 element属性控制
Jul 23 Javascript
JavaScript中判断变量是数组、函数或是对象类型的方法
Feb 25 Javascript
JS实现的自定义显示加载等待图片插件(loading.gif)
Jun 17 Javascript
jquery代码规范让代码越来越好看
Feb 03 Javascript
jQuery插件zTree实现单独选中根节点中第一个节点示例
Mar 08 Javascript
jQuery Plupload上传插件的使用
Apr 19 jQuery
使用Require.js封装原生js轮播图的实现代码
Jun 15 Javascript
纯javascript前端实现base64图片下载(兼容IE10+)
Sep 14 Javascript
vscode 开发Vue项目的方法步骤
Nov 25 Javascript
使用 webpack 插件自动生成 vue 路由文件的方法
Aug 20 Javascript
vue cli4下环境变量和模式示例详解
Apr 09 Javascript
Node.js API详解之 V8模块用法实例分析
Jun 05 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获取一定范围内取N个不重复的随机数
2016/05/28 PHP
mac系统下安装多个php并自由切换的方法详解
2017/04/21 PHP
php封装的pdo数据库操作工具类与用法示例
2019/05/08 PHP
超级24小时弹窗代码 24小时退出弹窗代码 100%弹窗代码(IE only)
2010/06/11 Javascript
基于MooTools的很有创意的滚动条时钟动画
2010/11/14 Javascript
jQuery 联动日历实现代码
2012/05/31 Javascript
ie8 不支持new Date(2012-11-10)问题的解决方法
2013/07/31 Javascript
JS中获取函数调用链所有参数的方法
2015/05/07 Javascript
浅谈Javascript数组的使用
2015/07/29 Javascript
JavaScript实现将文本框的值插入指定位置的方法
2015/08/13 Javascript
js实现创建删除html元素小结
2015/09/30 Javascript
jQuery简单实现列表隐藏和显示效果示例
2016/09/12 Javascript
通过BootStrap-select插件 js jQuery控制select属性变化
2017/01/03 Javascript
微信小程序 request接口的封装实例代码
2017/04/26 Javascript
vue的Virtual Dom实现snabbdom解密
2017/05/03 Javascript
JavaScript订单操作小程序完整版
2017/06/23 Javascript
详解ES6之用let声明变量以及let loop机制
2017/07/15 Javascript
浅谈jquery中ajax跨域提交的时候会有2次请求的问题
2017/11/10 jQuery
vue2 v-model/v-text 中使用过滤器的方法示例
2019/05/09 Javascript
js中值引用和地址引用实例分析
2019/06/21 Javascript
Node.js 在本地生成日志文件的方法
2020/02/07 Javascript
Vue实现鼠标经过文字显示悬浮框效果的示例代码
2020/10/14 Javascript
理解python多线程(python多线程简明教程)
2014/06/09 Python
Python实现字典按照value进行排序的方法分析
2017/12/23 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
2019/01/17 Python
TensorFlow梯度求解tf.gradients实例
2020/02/04 Python
使用Python打造一款间谍程序的流程分析
2020/02/21 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
2020/06/03 Python
白俄罗斯在线大型超市:e-dostavka.by
2019/07/25 全球购物
解释一下抽象方法和抽象类
2016/08/27 面试题
二年级语文教学反思
2014/02/02 职场文书
新年团拜会主持词
2014/04/02 职场文书
2015年超市工作总结范文
2015/05/26 职场文书
开国大典观后感
2015/06/04 职场文书
初三英语教学反思
2016/02/15 职场文书
创业计划书之餐饮
2019/09/02 职场文书