首先还是从很热门的实例parseInt("09")==0说起。

parseInt(numString, [radix])这个函数后面如果不跟第2个参数来表示进制的话,默认是10进制。

比如说parseInt("010",10)就是10进制的结果:10,parseInt("010",2)就是2进制的结果:2,parseInt("010",8)就是8进制的结果:8,parseInt("010",16)就是16进制的结果:16。

下面我来说说没有指定进制单位的时候,默认是10进制,但:如果是里面的numString是0开头的就认为是8进制的,如果是0x开头的就认为是16进制的。

parseInt("10")==>parseInt("010",10)===>10

parseInt("010")==>parseInt("010",8)==>8

parseInt("0x10")==>parseInt("010",16)==>16.

许多事情不是想的那么顺利,比如说如果numString不是我们给的正常数字又怎么解释呢。查了些资料,是这样说的:

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

总结,parseInt(numString)里面的值:

(1)如果是第一位不是0就遇到字母就停止解析,并把字母前面的值作为10进制去解析,如果第一个就是字母那么值就是空,空成了NaN,比如:

parseInt("a")==>parseInt("",10)==>NaN.

parseInt("10a")==>parseInt("10")==>parseInt("10",10)==>10;

(2)如果第一位是0,且第2位不是x也和上面一样遇到字母就停止解析,并把字母前面的值作为8进制去解析,比如:

parseInt("0a")==>parseInt("0")==>parseInt("0",10)==>0.

PS:这个有点特殊,因为0a被解析成了0,还不具备看做是8进制的结构,下面那个就明显了。

parseInt("010a")==>parseInt("010")==>parseInt("10",8)==>8;

(3)如果第一位是0,且第2位是x那后面也和上面一样遇到字母就停止解析,并把字母前面的值作为16进制去解析,比如:

parseInt("0xt")==>parseInt("",16)==>NaN.

parseInt("0x12t")==>parseInt("12",16)==>18.

最新文章

  1. 使用注解匹配Spring Aop切点表达式
  2. linux 排序命令sort
  3. Emphasis on Filtering & Depth Map Occlusion Filling
  4. Excel与Word套打功能使用技巧及EXCEL数据处理成绩
  5. 向peersim开火!P2P开火!(安装和样例运行)
  6. Spring 4 官方文档学习 Spring与Java EE技术的集成
  7. ibatis 搭建总结
  8. js对象转到字符串
  9. 多个文件目录下Makefile的写法
  10. 用QT创建WINDOWS服务程序
  11. [jQuery1.9]Cannot read property ‘msie’ of undefined错误的解决方法
  12. 从性能角度看react组件拆分的重要性
  13. 玩转spring boot——ajax跨域
  14. Canvas 实现灵动的红鲤鱼动画(上)
  15. Python批量修改寄存器的值
  16. 西北地区打不开github的解决办法~
  17. unsigned char idata temp[8];
  18. Number Sequence POJ - 1019 递推 数学
  19. ACM-ICPC 2018 南京赛区网络预赛 Solution
  20. struts2马士兵笔记

热门文章

  1. BZOJ 4554: [Tjoi2016&Heoi2016]游戏 二分图匹配
  2. ROS知识(17)----Actionlib使用的例子
  3. 你的C/C++程序为什么无法运行?揭秘Segmentation fault (2)
  4. UCS UTF UTF-7 UTF-8 UTF-16
  5. oracle 锁系列
  6. /dev/rdsk 与 /dev/dsk区别
  7. win7 系统盘怎样瘦身! 可整理出4-5G。
  8. 我对NHibernate的感受(3):有些尴尬的集合支持
  9. AutoCAD二次开发——AutoCAD.NET API开发环境搭建
  10. java内存模型知识点汇总