JavaScript的parseInt 取整使用


Posted in Javascript onMay 09, 2011

Java 也有 Integer.parseInt() 方法, 但是 JavaScript 的 parseInt 处理方式与 Java 等强整型语言不太一样, 所以经常有人因为对这个方法的使用不当而获得异常返回.

下面是一段 Java 代码, 用于将字符串 020 转为整型.

public class Test { 
public static void main(String args[]) throws Exception { 
String str = "020"; 
System.out.println(Integer.parseInt(str)); 
} 
}

输出结果是 20

下面是一段 JavaScript 代码, 同样是将字符串 020 转为整型.

var str = "020"; 
var num = parseInt(str); 
alert(num);

输出结果是 16

为什么呢?
无论是 Java 还是 JavaScript, parseInt 方法都有两个参数, 第一个参数就是要转换的对象, 第二个参数是进制基数, 可以是 2, 8, 10, 16, 默认以 10 进制处理. 但在 JavaScript 中, 0 开始的数被认为使用 8 进制处理, 0x 的数被认为是用 16 进制来处理. 所以上面的 JavaScript 代码计算错误了.

影响大吗?
大! 很大! 因为这个经常用于计算价钱, 一旦价格错误, 对用户来说, 这是误导, 而一个好的网站不应该出现这种误导用户的. 下面的 DEMO 中, 没有指定进制. 大家可以在数量框中输入一个以 0 开头的数字, 在点击计算按钮, 算出来的数值将比预想中的小一些, 或者小很多 (如: 8 进制中没有 019 这样的数值, 所以数值变成了 1, 9 被忽略掉).
没有为 parseInt 函数指定进制的 DEMO

如何修改?
前面说过, 有两个参数, 第二个参数可以指定计算使用的进制.

parseInt(num, radix);

所以我们可以将前面有问题的那段 JavaScript 代码改写为下面的代码.
var str = "020"; 
var num = parseInt(str, 10); 
alert(num);

这样处理的话, 我们再重写一些前面的 DEMO, 如下:
为 parseInt 函数指定进制为 10 的 DEMO
记住了, 在 JavaScript 上使用 parseInt 方法时要带上进制参数.
Javascript 相关文章推荐
使用iframe window的scroll方法控制iframe页面滚动
Mar 05 Javascript
JavaScript获取图片的原始尺寸以宽度为例
May 04 Javascript
jquery文本框中的事件应用以输入邮箱为例
May 06 Javascript
jQuery循环滚动新闻列表示例代码
Jun 17 Javascript
浅谈Sizzle的“编译原理”
Apr 14 Javascript
js正则表达式匹配数字字母下划线等
Apr 14 Javascript
Angular将填入表单的数据渲染到表格的方法
Sep 22 Javascript
详解Node.js利用node-git-server快速搭建git服务器
Sep 27 Javascript
vue组件中的数据传递方法
May 14 Javascript
产制造追溯系统之通过微信小程序实现移动端报表平台
Jun 03 Javascript
vue使用混入定义全局变量、函数、筛选器的实例代码
Jul 29 Javascript
Vue-router中hash模式与history模式的区别详解
Dec 15 Vue.js
实现变速回到顶部的JavaScript代码
May 09 #Javascript
Javascript 倒计时源代码.(时.分.秒) 详细注释版
May 09 #Javascript
Chrome Form多次提交表单问题的解决方法
May 09 #Javascript
JQuery将文本转化成JSON对象需要注意的问题
May 09 #Javascript
通过Jscript中@cc_on 语句识别IE浏览器及版本的代码
May 07 #Javascript
基于JQUERY的两个ListBox子项互相调整的实现代码
May 07 #Javascript
基于jquery的lazy loader插件实现图片的延迟加载[简单使用]
May 07 #Javascript
You might like
把PHP安装为Apache DSO
2006/10/09 PHP
html中select语句读取mysql表中内容
2006/10/09 PHP
php中的时间显示
2007/01/18 PHP
那些年我们错过的魔术方法(Magic Methods)
2014/01/14 PHP
解读PHP中上传文件的处理问题
2016/05/29 PHP
PHP实现上传多文件示例代码
2017/02/20 PHP
jQuery 1.8 Release版本发布了
2012/08/14 Javascript
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
2012/10/11 Javascript
用JQuery 判断某个属性是否存在hasAttr的解决方法
2013/04/26 Javascript
javascript字符串替换及字符串分割示例代码
2013/12/12 Javascript
jquery使用ul模拟select实现表单美化的方法
2015/08/18 Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
2015/12/16 Javascript
JS日程管理插件FullCalendar简单实例
2017/02/07 Javascript
微信小程序getPhoneNumber获取用户手机号
2017/09/29 Javascript
基于 flexible 的 Vue 组件:Toast -- 显示框效果
2017/12/26 Javascript
对vue里函数的调用顺序介绍
2018/03/17 Javascript
Angular ng-animate和ng-cookies用法详解
2018/04/18 Javascript
vue - props 声明数组和对象操作
2020/07/30 Javascript
用Python制作简单的钢琴程序的教程
2015/04/01 Python
python基于pygame实现响应游戏中事件的方法(附源码)
2015/11/11 Python
Python通过future处理并发问题
2017/10/17 Python
Python中的支持向量机SVM的使用(附实例代码)
2019/06/26 Python
python pandas时序处理相关功能详解
2019/07/03 Python
django项目中使用手机号登录的实例代码
2019/08/15 Python
Python 实现大整数乘法算法的示例代码
2019/09/17 Python
python 实现生成均匀分布的点
2019/12/05 Python
python DataFrame转dict字典过程详解
2019/12/26 Python
Python打开文件、文件读写操作、with方式、文件常用函数实例分析
2020/01/07 Python
丝芙兰巴西官方商城:SEPHORA巴西
2016/10/31 全球购物
购买200个世界上最好的内衣品牌:Bare Necessities
2017/02/11 全球购物
JAVA和C++的区别
2013/10/06 面试题
玲玲的画教学反思
2014/02/04 职场文书
《千年梦圆在今朝》教学反思
2014/02/24 职场文书
爱心捐赠活动简讯
2015/07/20 职场文书
评测 | 大屏显示带收音机的高端音箱,JBL TUNE2便携式插卡音箱实测
2021/04/24 无线电
Matplotlib绘制混淆矩阵的实现
2021/05/27 Python