一元加/数(X)和parseFloat(X)之间的区别是什么?
我问这个只是为了节省几个字节。
我知道我可以使用+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
所以我通常只使用+
作为缩写。只要你知道它是做什么的,我觉得它很容易读。
相关文章