JS的parseInt函数

parseInt()

(1)基本用法

parseInt方法可以将字符串或小数转化为整数。如果字符串开头有空格(包括\t,\r,\n等),空格会被自动去除。

parseInt('123') 	// 123
parseInt(1.23)  	// 1
parseInt('  \t\r123')	// 123

字符串转化为整数的时候,是一个个字符依次转换,如果遇到不能转换的字符,就不再进行下去,返回已经转换好的部分。

parseInt('8a')		// 8
parseInt('12***')	// 12
parseInt('12.34')	// 12
parseInt('0xf00')       // 3840

上面代码中,parseInt的参数都是字符串,结果只返回字符串头部可以转换为数字的部分。最后一行的0xf00可以转换为数字是因为0x是十六进制的标准同理0b,0o分别表示的二进制和八进制也可以。那么问题来了,要是一开始就是不能转换的字母呢?比如:“x”。

parseInt('x')		// NaN
parseInt('+')		// NaN
parseInt('+12')		// 12
parseInt('-')		// NaN
parseInt('-12')		// -12
可以看见这种情况直接返回NaN,同样可以看见,如果出现了+\-号也会有特殊的处理。

parseInt([])		// Nan
parseInt([123])		// 123
parseInt([123,456])     // 123
parseInt(['123'])	// 123

再看对数组的处理,对空数组不能转换为整数,返回了NaN,而对于可转换的数组也只转换了部分。

(2)进制转换

parseInt方法还可以接受第二个参数(2到36之间,为什么是2-36呢,进位制最小的就是2进制,比2再小就没意义了,至于36是0-9,a-z共36个可表示数值的元素,最大能表示为36进制。),表示被解析的数(第一个参数)的进制,返回该数对应的10进制值。

parseInt(1000,2)	// 8
parseInt(1000,6)	// 216
parseInt(1000,8)	// 512

上述代码演示了第二个参数的作用,那么问题又来了,如果两者进位不统一怎么办?第二个值无效怎么办?等等问题,让我们一一解答。

首先如果第二个参数不是数值,则会自动转换为整数,只有在转换后在2-36之间,才有意义,否则返回NaN。如果第二个参数是0,undefined,null,[],Infinity,NaN等,则直接忽略。

parseInt(10,37)			// NaN
parseInt(10,1)			// NaN
parseInt(10,0)			// 10
parseInt(10,null)		// 10
parseInt(10,undefined)	        // 10
parseInt(10,[])			// 10
parseInt(10,NaN)		// 10
parseInt(10,Infinity)	        // 10
其次,如果第一个参数是字符串或数值的时候,parseInt的行为不一致,如果第一个参数是数值,会先将这个数值转换为十进制,然后用第二个参数进行进制转换
parseInt(0o16,36)	// 40
parseInt(14,36)		// 40

上面代码中0o16会先被转换为十进制14,然后再用36进制进行进制转换,结果是40

而如果第一个参数是字符串,则会直接用指定进制进行解读,如果前一个参数中有超过进制最大基数的值则返回NaN

parseInt('0x11',36)		// 42805
parseInt('x',36)		// 33
parseInt('x',16)		// NaN
第一个x会被当做33解析,第三个返回NaN是因为16进制最大基数是F,x超界了。

由于这种行为的不一致会导致如下现象。

parseInt(010,8)			// NaN
parseInt('010',8)		// 8
噫,为什么第一个会是NaN而第二个是8?由于行为不一致,第一个会先解析前一个参数转换为10进制是8,而第二个参数设置为8进制,8进制没有数表示8因此是返回NaN,而第二个里面会直接把这个数解析出来,就是8。

(3)科学计数法,由于科学计数法中有个e/E,因此在转换过程中也会出现些有趣的事情。

parseInt(1000000000000000000000.5,10)		// 1
parseInt('1e+21',10)		// 1
parseInt(0.0000005,10)		// 5
parseInt('5e-7',10)		// 5
在转换过程中,parseInt会将那些会自动转换为科学计数法的数字视为字符串,读到e的时候就不能解析了,因此出现了不正确的结果。


  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值