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
所以我通常只使用+ 简称。只要你知道它的作用,我觉得它很容易阅读。