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
感谢阅读
公众号为首发平台,关注不迷路,找到组织一起进步