当前位置: 首页 >文章 > JavaScript - parseInt
收藏
分享

JavaScript - parseInt

举报李游Leo李游Leo发布于 2021-06-011452阅读0点赞
parseInt()函数的转化方法...

当然除了Number()函数的转化方法之外,我们也可以使用上文提到的parseInt()函数。parseInt()函数在实际转化时因为比Number()函数规则更简单,所以使用频率更高,更容易被程序员接受。parseInt()在把字符串传递使用时,会自动忽略字符串前面的空格,直到找到第一个非空格字符。如果第一个字符不是数字字符或者负号,parseInt()就会返回NaN;所以这一点和Number()转化有个特别不一样的区别,如果用parseInt()转化空字符串会得到NaN,但是Number()对空字符串会返回0。当然传入的参数第一个字符为数字字符,那么parseInt()会继续解析第二个字符,直到解析完后续或遇到了非数字字符停止。例如,"111leo"会被转化为数字的111,"leo"会因为首先看到了非数字字符“l”而停止,之后的内容则被完全忽略。类似的,"11.1"会被转化为数字11,因为小数点也不是有效的数字字符,所以后面也会被完全忽略。

不过parseInt()也有着非常智能的一面,它也可以识别出各种整数格式,类似于十进制、八进制、十六进制都可以。类似于如果我们使用字符串以"0x"开头且后面跟数字字符,那么就会被当作一个十六进制整数;如果我们以字符串“0”开头且后面跟数字字符,那么就会被当作一个八进制数来解析。


例如:

不过parseInt()在解析八进制的字面量字符串时,老版本的浏览器和新版本的浏览器会产生分歧,这个问题导致的原因是ECMAScript 3引擎和 ECMAScript 5引擎的问题。

在JavaScript的ECMAScript 3中,"070"被当作了八进制的字面量,因此转化的最后结果为十进制的56。但是在ECMAScript 5的JavaScript中,parseInt()取消了默认解析八进制的能力,因此零会被认为无效,从而将这个值当作"0",结果就是十进制的0,所以最后结果就变成了数字的70。这个在ECMAScript 5中的严格模式中也会是这样的结果。

不过为了让parseInt()函数还具备解析其他进制的功能,其还具备了第二个参数:转换使用的基数,也就是进制数。例如,如果知道要解析的内容值是十六进制的字符串,我们可以指定基数16作为第二个参数来进行解析,例如:

甚至,如果指定了16作为了第二个参数,字符串还可以不带前面的十六进制标志性的“0x”,例如:

我们可以看到第一个转化失败了,因为parseInt()不会认为字符串"a"是十六进制的数字,只是认为是一个单纯的字符串"a",所以根据parseInt()的转化规则,所以被转化成了NaN;而第二个转化因为第二个参数告知了是十六进制的字符串,所以字符串“a”被识别成了"0xa",也就被转化成了数字10。

所以指定的基数会直接影响到最后的输出结果,例如:

指定基数的情况下可以让parseInt()函数有着更明确的解析方式,如果为了避免错误的解析发生,我们可以多尝试使用基数。




本文原创,未经作者允许不可转载!

更多内容,欢迎关注作者微信公众号:李游Leo老师前端讲堂!


0条评论
别默默看啦~登录/注册一起参与讨论吧~

暂无评论

请选择举报理由

违反法律法规

侵犯个人权益

有害网站环境

更多训练营>>

为你推荐 · 训练营(全勤打卡报名费全额返累计全额返用户134,638人)

【10月】零基础动态表情包创作训练营
距离开班仅剩9天36人已报名
【10月】多风格插画入门训练营
距离开班仅剩9天30人已报名
10个实用版式构图技法
距离开班仅剩22天18人已报名
特惠
充值
7折购
今日还在继续学习的你,太棒了!
7
折扣券可用于
年费无限VIP
立 即
使 用
此活动优惠不可与其他活动叠加使用
有效期:000000
消息
登录即可查看消息记录
建议
意见
官方
客服
在线咨询

您可以与在线客服进行沟通获得帮助

工作日:9:00~22:00节假日:9:00~18:00

联系在线客服
虎课
积分
免费学习91000+个教程!
配套素材、源文件一键下载!
昨日学员已学习了33,157
并提交了168份作业!
登录后立即学习!
loading
微信扫码关注即可登录
您需要同意协议才可以进行登录
登录虎课网,每天免费学课程全站 91000+ 视频会员教程 | 每日可免费学 1
为确保账户信息安全
请先进行真实姓名验证后进行充值付款
立即验证