`
dean_liu
  • 浏览: 76237 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

[转]浅谈 js中parseInt函数的解析

 
阅读更多
转自:http://www.cnblogs.com/anjey/archive/2012/04/13/2445430.html

首先还是从很热门的实例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.
分享到:
评论

相关推荐

    js中parseInt函数浅谈

    parseInt(number,type)这个函数后面如果不跟第2个参数来表示进制的话,默认是10进制。比如说parseInt(“010”,10)就是10进制的结果:10,parseInt(“010”,2)就是2进制的结果:2,parseInt(“010”,8)就是8进制的...

    浅谈javascript中的数据类型转换

    JavaScript 中有几种基本的数据类型:字符串(String)、数字(Number)、布尔(Boolean)、对象(Object)、数组(Array)、函数(Function)、空(Null)、未定义(Undefined)以及ES6新增的符号(Symbol)和大...

    浅谈JS 数字和字符串之间相互转化的纠纷

    parseInt() 函数从string的开始解析,返回一个整数 parseInt(‘123’) : 返回 123; parseInt(‘1234xxx’) : 返回 1234; parseInt(‘123.456’) : 返回 123; parseInt(‘1 2 3’) : 返回 1;字符串的情况,自会...

    浅谈js常用内置方法和对象

    `parseInt()`和`parseFloat()`则是用来解析字符串中的数字,前者可以指定进制转换,后者则用于解析浮点数。`isNaN()`函数用于检测一个值是否为非数字,返回`true`或`false`。`isFinite()`函数则用来判断一个数是否为...

    浅谈JavaScript数据类型及转换

    - `parseInt()` 和 `parseFloat()` 用于将字符串转换为整数和浮点数,从字符串的开头开始解析。 - `Number()` 函数尝试将任何类型的值转换为数字,如果不能转换,返回 `NaN`。 - `isNaN()` 检查给定值是否是 `NaN...

    浅谈js里面的InttoStr和StrtoInt

    在JavaScript中,将整数转换为字符串非常简单,只需要使用String()函数即可实现。比如: ```javascript var num = 100; var str = String(num); // str的值就是"100" ``` 2. 使用toString()方法 toString()方法是...

    浅谈如何实现easyui的datebox格式化

    在前端开发中,EasyUI 是一款基于 jQuery 的 UI 插件库,它提供了一系列美观且易于使用的组件,其中包括 DateBox。DateBox 是一个用于输入日期的控件,它可以方便地展示和编辑日期。本文将深入探讨如何实现 EasyUI ...

Global site tag (gtag.js) - Google Analytics