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 相关文章推荐
基于逻辑运算的简单权限系统(实现) JS 版
Mar 24 Javascript
JQuery的html(data)方法与<script>脚本块的解决方法
Mar 09 Javascript
JavaScript版TAB选项卡效果实例
Aug 16 Javascript
js截取小数点后几位的写法
Nov 14 Javascript
jQuery实现tab选项卡效果的方法
Jul 08 Javascript
JavaScript模板引擎用法实例
Jul 10 Javascript
基于javascript实现全屏漂浮广告
Mar 31 Javascript
在js中实现邮箱格式的验证方法(推荐)
Oct 24 Javascript
AngularJS入门教程之数据绑定用法示例
Nov 01 Javascript
详解mpvue开发小程序小总结
Jul 25 Javascript
js回文数的4种判断方法示例
Jun 04 Javascript
layer.prompt使文本框为空的情况下也能点击确定的方法
Sep 24 Javascript
实现变速回到顶部的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和HTML5 FormData实现无刷新文件上传教程
2014/09/06 PHP
php实现cookie加密的方法
2015/03/10 PHP
win平台安装配置Nginx+php+mysql 环境
2016/01/12 PHP
php 在字符串指定位置插入新字符的简单实现
2016/06/28 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
使两个iframe的高度与内容自适应,且相等
2006/11/20 Javascript
javascript 在网页中的运用(asp.net)
2009/11/23 Javascript
用JS做的简单的可折叠的两级树形菜单
2013/09/21 Javascript
JS获取Table中td值的方法
2015/03/19 Javascript
jQuery的css() 方法使用指南
2015/05/03 Javascript
vue实现app页面切换动画效果实例
2017/05/23 Javascript
addeventlistener监听scroll跟touch(实例讲解)
2017/08/04 Javascript
vuejs使用FormData实现ajax上传图片文件
2017/08/08 Javascript
JS实现去除数组中重复json的方法示例
2017/12/21 Javascript
React从react-router路由上做登陆验证控制的方法
2018/05/10 Javascript
解决Nodejs全局安装模块后找不到命令的问题
2018/05/15 NodeJs
快速解决bootstrap下拉菜单无法隐藏的问题
2018/08/10 Javascript
javascript实现异形滚动轮播
2019/11/28 Javascript
解决vue无法侦听数组及对象属性的变化问题
2020/07/17 Javascript
vue项目中使用多选框的实例代码
2020/07/22 Javascript
原生js实现分页效果
2020/09/23 Javascript
[53:29]完美世界DOTA2联赛循环赛 DM vs Matador BO2第二场 11.04
2020/11/05 DOTA
python基础教程之Hello World!
2014/08/29 Python
Python定时器实例代码
2017/11/01 Python
Python 实现微信防撤回功能
2019/04/29 Python
python递归下载文件夹下所有文件
2019/08/31 Python
使用pytorch实现可视化中间层的结果
2019/12/30 Python
中东奢侈品市场:Coveti
2019/05/12 全球购物
在阿联酋购买翻新手机和平板电脑:Teckzu
2021/02/12 全球购物
实习公司领导推荐函
2014/05/21 职场文书
企业年度评优方案
2014/06/02 职场文书
初中军训感言
2015/08/01 职场文书
企业安全生产规章制度
2015/08/06 职场文书
2016年“5.12”护士节慰问信
2015/11/30 职场文书
Vue实现下拉加载更多
2021/05/09 Vue.js