一元加号/数字(x)和parseFloat(x)有什么区别?

2022-08-30 01:21:59

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

我知道我可以使用(一元加号)代替.这些和 之间有区别吗?+xNumber(x)parseFloat


答案 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

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

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

此外,理解十六进制输入,而不理解:NumberparseFloat

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

但是对于空字符串或仅包含空格的字符串,行为很奇怪:Number

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

总的来说,我发现它更合理,所以我几乎总是亲自使用(你会发现很多内部JavaScript函数也使用)。如果有人键入,我更喜欢显示错误,而不是将其视为键入 .我唯一真正破例的时候是当我将样式转换为数字时,在这种情况下是有帮助的,因为样式的形式如下,在这种情况下,我想删除零件并只得到,所以我在这里发现很有帮助。但实际上,你选择哪一个取决于你,以及你想接受哪种形式的输入。NumberNumberNumber'1x''1'parseFloat'3px''px'3parseFloat

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

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

所以我通常只是简称。只要你知道它的作用,我发现它很容易阅读。+


答案 2

区别在于当输入不是“正确数字”时会发生什么。 返回,同时“尽可能多地”解析。如果在空字符串上调用,则返回 parseFloat 返回 。NumberNaNparseFloatNumber0NaN

例如:

Number("") === 0               // also holds for false
isNaN(parseFloat("")) === true // and null

isNaN(Number("32f")) === true
parseFloat("32f") === 32