js怎么把字符串转数字

最近在掘金上看到一位大三的学生总结的一个js面试题:将字符串转换成数字。看了他的文章真让我想起去年的自己。

parseInt(num);

还是写代码比较快乐:如下

arseInt(12)
12
parseInt(12.09)
12
parseInt(-0.98)
-0
parseInt('12')
12
parseInt('12df')
12
parseInt('adh')
NaN
parseInt('1+2')
1
parseInt('4*6')
4
parseInt('3/2')
3
parseInt('2-1')
2
parseInt('12.png')
12

parseInt: 没有传入基数时,默认是传入的基数为10 parseInt(num, 10),如果你不知道num属性的类型,不要使用parseInt进行字符串转数字。

parseInt(num, 10);

我们大多数情况下都忽略了parseInt的第二个参数:radix,它的原型是这样的parseInt(string, radix)
在这里插入图片描述

parseInt("10");			//返回 10
parseInt("19",10);		//返回 19 (10+9)
parseInt("11",2);		//返回 3 (2+1)
parseInt("17",8);		//返回 15 (8+7)
parseInt("1f",16);		//返回 31 (16+15)
parseInt("010");		//未定:返回 10 或 8
["1","2","3"].map(parseInt)   //[1,NaN,NaN]
parseInt("123", 37)  //NaN 超过范围
parseInt("123", 0)  //123 当做10进制处理
parseInt("123", undefined)  //123 当做10进制处理
parseInt("123", null)  //123 当做10进制处理

我还写了一些没有规律的:

parseInt(12,2)
1
parseInt(10,2)
2
parseInt(13,3)
1
parseInt(188,4)
1
parseInt(7,8)
7
parseInt('1333',9)
1002
parseInt('11',2)
3
parseInt(11,2)
3
parseInt(010)
8
parseInt('010')
10
parseInt(78,8)
7
parseInt(1233,8)
667
parseInt('123',8)
83
parseInt("123", 16) === parseInt("0x123")

true

parseFloat(num)

如果你不解析16进制数,这是一个非常好的选择

parseInt(-0xFF) // returns -255
parseInt("-0xFF") // returns -255
parseFloat(-0xFF) // returns -255
parseFloat("-0xFF") // returns 0
parseFloat(12.333333)
12.333333
parseFloat(12.89ssa)
VM1397:1 Uncaught SyntaxError: Invalid or unexpected token
parseFloat('12gggg')
12
parseFloat('undefined')
NaN
parseFloat('sddd')
NaN
parseFloat(12.png)
VM1508:1 Uncaught SyntaxError: Invalid or unexpected token
parseFloat('12.png')
12

Number(num)

Number(012)
10
Number(12)
12
Number(-0.12)
-0.12
Number('122')
122
Number('0123')
123
Number('12png')
NaN
Number('12as')
NaN
Number(023)
19
Number(026)
22

注意:023实际上是一个八进制数,无论你怎么做,都是返回19;对于没有单引号或双引号的十六进制数一样。

Number也是JsPerf中最慢的之一。

Number:几乎不用它。

~~num

可以把字符串转换成整数,但他不是浮点数。如果是一个字符串转换,它将返回0;

~~1.23 // returns 1
~~"1.23" // returns 1
~~"23" // returns 23
~~"Hello world" // returns 0
~~3.4
3
~~-0.3
0
~~0.3
0
~~2.3444
2
~~-2.3
-2

一元运算符

num / 1 // 除一个数
num * 1 // 乘一个数
num - 0 // 减去0
+num // 一元运算符 “+”

"1.23" * 1 // returns 1.23
"0xFF" - 0 // returns 255
"0xFF.jpg" / 1 // returns NaN
+"023" // returns 23

总结:
负十六进制数字符串转换为数字时。最好使用带基数的 parseInt 解析为数字。明确知到进制数的也是通过带基数的 parseInt 解析为数字。其他的建议使用一元运算符+来将字符串转数字,也是最快的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值