Number()和parseInt()有啥区别?

Number()并parseInt()经常用于字符串转换为数字。

差异

Number() 转换类型,而 parseInt 解析输入的值。

//  解析
parseInt("32px");   // 32
parseInt("5e1");    // 5
​
​
// 转换类型
Number('32px');     // NaN
Number('5e1');      // 50

如上所示,parseInt将解析到第一个非数字字符。Number将尝试转换整个字符串。

parseInt接受两个参数。第二个参数用于表示基数

parseInt('0101');       // 101
parseInt('0101', 10);   // 101
parseInt('0101', 2);    // 5
​
Number('0101');         // 101

当我们传递诸如 undefined 或者 null 之类的特殊值时,它们会返回不同的结果:

parseInt();         // NaN
parseInt(null);     // NaN
parseInt(true);     // NaN
parseInt("");       // NaN
​
​
Number();           // 0
Number(null);       // 0
Number(true);       // 1
Number("");         // 0
 

严谨写法

始终将基数传递给parseInt.

该parseInt方法有两个参数

parseInt(value, radix);

第二个参数指定当前的数字系统。如果未指定,则将根据该值自动设置。

如果值以0xor开头0X,则基数为 16(十六进制)

在其他情况下,基数为 10(十进制)。

在旧版本的 JavaScript 中,如果字符串以 0 开头,则基数设置为 8(八进制)。

parseInt('0xF');        // 15
parseInt('0XF');        // 15
parseInt('0xF', 16);    // 15
​
parseInt('0xF', 10);    // 0

由于该方法可能在不同版本的 JavaScript 和浏览器中实现不同,因此建议传递基数。

在解析数字之前修剪空格。

双方Number()并parseInt接受输入的空间。但请注意,在传递带有空格的值时,可能会得到不同的结果,如下所示:

parseInt('   5   ');    // 5
parseInt('12 345');     // 12, not 12345

为避免类似情况,应该在解析之前删除所有空格:

parseInt(value.replace(/\s+/g, ''), 10);

不要new Number()用来比较数字。

Number('2') == 2;           // true
Number('2') === 2;          // true
​
​
new Number('2') == 2;       // true
new Number('2') === 2;      // false
​
​
const a = new Number('2');
const b = new Number('2');
​
​
a == b;     // false
a === b;    // false

小技巧

可以使用+运算符去更简单的转换类型,不用Number()构造函数将字符串转换为数字

+'010';     // 10
+'2e1';     // 20
+'0xF';     // 15


 


 

THE END

感谢阅读

公众号为首发平台,关注不迷路,找到组织一起进步

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值