小编典典

Unary Plus/Number(x) 和 parseFloat(x) 有什么区别?

all

我问这个只是为了节省几个字节。

我知道我可以使用+x(unary plus) 而不是Number(x). 那些 和 有区别parseFloat吗?


阅读 61

收藏
2022-07-06

共1个答案

小编典典

parseFloat 和 Number 的区别

parseFloat/parseInt用于解析字符串,而Number/+用于将值强制为数字。他们的行为不同。但首先让我们看看它们在哪里表现相同:

parseFloat('3'); // => 3
Number('3'); // => 3
parseFloat('1.501'); // => 1.501
Number('1.501'); // => 1.501
parseFloat('1e10'); // => 10000000000
Number('1e10'); // => 10000000000

因此,只要您有标准的数字输入,就没有区别。但是,如果您的输入以数字开头,然后包含其他字符,parseFloat则将数字从字符串中截断,同时Number给出NaN(不是数字):

parseFloat('1x'); // => 1
Number('1x'); // => NaN

此外,Number理解十六进制输入,parseFloat但不理解:

parseFloat('0x10'); // => 0
Number('0x10'); // => 16

但是Number对于空字符串或仅包含空格的字符串会表现得很奇怪:

parseFloat(''); // => NaN
Number(''); // => 0
parseFloat(' \r\n\t'); // => NaN
Number(' \r\n\t'); // => 0

总的来说,我觉得Number更合理,所以我几乎总是Number亲自使用(你会发现很多内部 JavaScript
函数Number也使用)。如果有人键入'1x',我更愿意显示错误而不是将其视为他们键入了'1'.
我真正例外的唯一一次是当我将样式转换为数字时,在这种情况下parseFloat很有帮助,因为样式以类似的形式出现'3px',在这种情况下,我想删除'px'部分并获得3,所以我觉得parseFloat很有帮助这里。但实际上,您选择哪一种取决于您以及您想接受哪种形式的输入。

请注意,使用一元运算+符与使用函数完全相同Number

Number('0x10'); // => 16
+'0x10'; // => 16
Number('10x'); // => NaN
+'10x'; // => NaN
Number('40'); // => 40
+'40'; // => 40

所以我通常只是简单地使用+。只要你知道它的作用,我觉得它很容易阅读。

2022-07-06