一元加/数(X)和parseFloat(X)之间的区别是什么?

2022-07-22 00:00:00 optimization javascript

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

我知道我可以使用+x(一元加号)来代替Number(x)。与parseFloat有区别吗?


解决方案

parseFloat和Numbers之间的差异

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(' 
	'); // => NaN
Number(' 
	'); // => 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

所以我通常只使用+作为缩写。只要你知道它是做什么的,我觉得它很容易读。

相关文章