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 相关文章推荐
JavaScript 学习小结(适合新手参考)
Jul 30 Javascript
JQuery 操作select标签实现代码
May 14 Javascript
Extjs改变树节点的勾选状态点击按钮将复选框去掉
Nov 14 Javascript
EasyUI中combobox默认值注意事项
Mar 01 Javascript
Javascript 动态改变imput type属性
Nov 01 Javascript
javascript实现简单的ajax封装示例
Dec 28 Javascript
JavaScript组件开发之输入框加候选框
Mar 10 Javascript
jQuery插件DataTables分页开发心得体会
Aug 22 jQuery
JS实现带导航城市列表以及输入搜索功能
Jan 04 Javascript
JS实现的DOM插入节点操作示例
Apr 04 Javascript
JS无限级导航菜单实现方法
Jan 05 Javascript
浅谈VUE防抖与节流的最佳解决方案(函数式组件)
May 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
解析php中mysql_connect与mysql_pconncet的区别详解
2013/05/15 PHP
解析在PHP中使用全局变量的几种方法
2013/06/24 PHP
php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证
2016/05/04 PHP
PHP入门教程之图像处理技巧分析
2016/09/11 PHP
解决laravel id非自增 模型取回为0 的问题
2019/10/11 PHP
Laravel 创建可以传递参数 Console服务的例子
2019/10/14 PHP
javascript一些不错的函数脚本代码
2008/09/10 Javascript
innerhtml用法 innertext用法 以及innerHTML与innertext的区别
2009/10/26 Javascript
基于SVG的web页面图形绘制API介绍及编程演示
2013/06/28 Javascript
Extjs的FileUploadField文件上传出现了两个上传按钮
2014/04/29 Javascript
nodejs下打包模块archiver详解
2014/12/03 NodeJs
jquery实现点击变换导航样式的方法
2015/08/31 Javascript
jquery插件EasyUI中form表单提交实例分享
2016/01/11 Javascript
NodeJS远程代码执行
2016/08/28 NodeJs
JS 中LocalStorage和SessionStorage的使用
2017/08/17 Javascript
如何对react hooks进行单元测试的方法
2019/08/14 Javascript
微信小程序 组件的外部样式externalClasses使用详解
2019/09/06 Javascript
java遇到微信小程序 "支付验证签名失败" 问题解决
2019/12/22 Javascript
[06:45]DOTA2卡尔工作室 英雄介绍幻影长矛手篇
2013/07/12 DOTA
django站点管理详解
2017/12/12 Python
python中栈的原理及实现方法示例
2019/11/27 Python
python实现将一维列表转换为多维列表(numpy+reshape)
2019/11/29 Python
keras小技巧——获取某一个网络层的输出方式
2020/05/23 Python
CSS3属性background-size使用指南
2014/12/09 HTML / CSS
详解Canvas实用库Fabric.js使用手册
2019/01/07 HTML / CSS
学校元旦晚会方案
2014/02/19 职场文书
授权委托书怎么写
2014/04/03 职场文书
大学生求职计划书
2014/04/30 职场文书
经管应届生求职信范文
2014/05/18 职场文书
还款承诺书范文
2014/05/20 职场文书
小学教师师德师风个人整改措施
2014/09/18 职场文书
房屋租赁意向书范本
2015/05/09 职场文书
五年级数学教学反思
2016/02/16 职场文书
Django与数据库交互的实现
2021/06/03 Python
MongoDB数据库常用的10条操作命令
2021/06/18 MongoDB
浅谈音视频 pts dts基本概念及理解
2022/08/05 数码科技