zoukankan      html  css  js  c++  java
  • 浅谈 js中parseInt函数的解析[转]

    首先还是从很热门的实例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)就是16进制的结果:16。
    
    下面我来说说没有指定进制单位的时候,默认是10进制,但:如果是里面的Number是0开头的就认为是8进制的,如果是0x开头的就认为是16进制的。
    
    parseInt("10")==>parseInt("010",10)===>10
    
    parseInt("010")==>parseInt("010",8)==>8
    
    parseInt("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.
  • 相关阅读:
    ....
    CodeForces 375A(同余)
    POJ 2377 Bad Cowtractors (最小生成树)
    POJ 1258 AgriNet (最小生成树)
    HDU 1016 Prime Ring Problem(全排列)
    HDU 4460 Friend Chains(bfs)
    POJ 2236 Wireless Network(并查集)
    POJ 2100 Graveyard Design(尺取)
    POJ 2110 Mountain Walking(二分/bfs)
    CodeForces 1059B Forgery(模拟)
  • 原文地址:https://www.cnblogs.com/wxh04/p/4209250.html
Copyright © 2011-2022 走看看