js中parseInt函数浅谈


Posted in Javascript onJuly 31, 2013

从很热门的实例parseInt("09")==0说起。
parseInt(number,type)这个函数后面如果不跟第2个参数来表示进制的话,默认是10进制。
比如说parseInt("010",10)就是10进制的结果:10,
parseInt("010",2)就是2进制的结果:2,
parseInt("010",8)就是8进制的结果:8,
parseInt("010",16)就是2进制的结果:16。

下面我来说说没有指定进制单位的时候,默认是10进制,但:如果是里面的Number是0开头的就认为是8进制的,如果是0x开头的就认为是16进制的。
parseInt("10")==>parseInt("010",10)===>10parseInt("010")==>parseInt("010",8)==>8parseInt("0x10")==>parseInt("010",16)==>16.

到这里很顺利.
许多事情不是想的那么顺利,比如说如果Number不是我们给的正常数字又怎么解释呢。查了些资料,是这样说的:
parseInt(Number)如果中间的Number遇到不是数字(0-9)的就中断往下解析,就只取不是数字之前的值去运算:比如parseInt("100x"),就相当于parseInt("100")===》parseInt("100",10)==>100,又如parseInt("0100x")===>parseInt("0100")===>parseInt("100",8)===>64.
到这里我们似乎无视了一个就是16进制中的有个x,它也不是数字,是不是遇到x也无视了呢。尝试下了发现在这个特殊处理了下,
比如parseInt("0x10")===>parseInt("10",16)===>16和最上面的结果相符,但却和我刚说的,不是字符就自动不解析就应该理解成parseInt("0")相违背。

这里就需要注意下,parseInt里面的Number是这样的,当如果第一个不是0且不是字符就认为是10进制,一切照旧执行,遇到字母就停下来。又当如果是第一个是0,后面那个就需要注意了,如果是x就继续往下走,这里的x不代表数值,只能和前面的0一起组成0x代表16进制的单位,后面的才按上面我们讲的遇到非数字停止解析的规则来。比如parseInt("0xt")==>parseInt("0x")==>parseInt("",16)就是NaN了。

总结下,parseInt(Number)里面的值:如果是第一位不是0就遇到字母就停止解析,并把字母前面的值作为10进制去解析,如果第一个就是字母那么值就是空,空成了NaN,
比如:parseInt("a")==>parseInt("",10)==>NaN.parseInt("10a")==>parseInt("10")==>parseInt("10",10)==>10;
如果第一位是0,且第2位不是x也和上面一样遇到字母就停止解析,并把字母前面的值作为8进制去解析,比如:parseInt("0a")==>parseInt("0")==>parseInt("0",10)==>0.PS:这个有点特殊,因为0a被解析成了0,还不具备看做是8进制的结构,下面那个就明显了。
parseInt("010a")==>parseInt("010")==>parseInt("10",8)==>8;如果第一位是0,且第2位是x那后面也和上面一样遇到字母就停止解析,并把字母前面的值作为16进制去解析,比如:parseInt("0xt")==>parseInt("",16)==>NaN.parseInt("0x12t")==>parseInt("12",16)==>18.

Javascript 相关文章推荐
prototype与jquery下Ajax实现的差别
Sep 13 Javascript
EXTJS记事本 当CompositeField遇上RowEditor
Jul 31 Javascript
JavaScript判断一个字符串是否包含指定子字符串的方法
Mar 18 Javascript
Javascript调用函数方法的几种方式介绍
Mar 20 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
Jul 21 Javascript
js代码实现随机颜色的小方块
Jul 30 Javascript
Bootstrap table两种分页示例
Dec 23 Javascript
React创建组件的三种方式及其区别
Jan 12 Javascript
JavaScript多态与封装实例分析
Jul 27 Javascript
微信小程序支付前端源码
Aug 29 Javascript
详解vue中的父子传值双向绑定及数据更新问题
Jun 13 Javascript
layui的面包屑或者表单不显示的解决方法
Sep 05 Javascript
JavaScript中的关键字"VAR"使用详解 分享
Jul 31 #Javascript
JavaScript 和 Java 的区别浅析
Jul 31 #Javascript
javascript检查表单数据是否改变的方法
Jul 30 #Javascript
JS 对输入框进行限制(常用的都有)
Jul 30 #Javascript
JS无限极树形菜单,json格式、数组格式通用示例
Jul 30 #Javascript
js中widow.open()方法使用详解
Jul 30 #Javascript
Extjs NumberField后面加单位实现思路
Jul 30 #Javascript
You might like
PHP curl 获取响应的状态码的方法
2014/01/13 PHP
Laravel 5.3 学习笔记之 配置
2016/08/28 PHP
Laravel Eloquent ORM 多条件查询的例子
2019/10/10 PHP
JS 控制CSS样式表
2009/08/20 Javascript
Grid得到选择行数据的方法总结
2011/01/17 Javascript
js 实现图片预加载(js操作 Image对象属性complete ,事件onload 异步加载图片)
2011/03/25 Javascript
JS Pro-深入面向对象的程序设计之继承的详解
2013/05/07 Javascript
多个$(document).ready()的执行顺序实例分析
2014/07/26 Javascript
node.js中的querystring.unescape方法使用说明
2014/12/10 Javascript
JavaScript截取、切割字符串的技巧
2016/01/07 Javascript
jquery获取文档高度和窗口高度汇总
2016/01/25 Javascript
jsTree使用记录实例
2016/12/01 Javascript
jQuery实现按比例缩放图片的方法
2017/04/29 jQuery
angular过滤器实现排序功能
2017/06/27 Javascript
vue中路由参数传递可能会遇到的坑
2017/12/07 Javascript
用vue2.0实现点击选中active其他选项互斥的效果
2018/04/12 Javascript
详解ECMAScript typeof用法
2018/07/25 Javascript
写gulp遇到的ES6问题详解
2018/12/03 Javascript
vue中img src 动态加载本地json的图片路径写法
2019/04/25 Javascript
JavaScript 作用域实例分析
2019/10/02 Javascript
[02:43]中国五虎出征TI3视频
2013/08/02 DOTA
python使用PyGame模块播放声音的方法
2015/05/20 Python
python调用fortran模块
2016/04/08 Python
python爬虫之百度API调用方法
2017/06/11 Python
Python3实战之爬虫抓取网易云音乐的热门评论
2017/10/09 Python
使用matplotlib中scatter方法画散点图
2019/03/19 Python
Python空间数据处理之GDAL读写遥感图像
2019/08/01 Python
python 实现目录复制的三种小结
2019/12/04 Python
Python如何在单元测试中给对象打补丁
2020/08/03 Python
Python eval函数介绍及用法
2020/11/09 Python
Servlet如何得到客户端机器的信息
2014/10/17 面试题
滞留工资返还协议书
2014/10/19 职场文书
大学新生入学感想
2015/08/07 职场文书
详解如何修改nginx的默认端口
2021/03/31 Servers
python实现简单的三子棋游戏
2022/04/28 Python
MySQL sql模式设置引起的问题
2022/05/15 MySQL