我问这个只是为了节省几个字节。
我知道我可以使用+x(unary plus) 而不是Number(x). 那些 和 有区别parseFloat吗?
+x
Number(x)
parseFloat
parseFloat/parseInt用于解析字符串,而Number/+用于将值强制为数字。他们的行为不同。但首先让我们看看它们在哪里表现相同:
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(不是数字):
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很有帮助这里。但实际上,您选择哪一种取决于您以及您想接受哪种形式的输入。
'1x'
'1'
'3px'
'px'
3
请注意,使用一元运算+符与使用函数完全相同Number:
Number('0x10'); // => 16 +'0x10'; // => 16 Number('10x'); // => NaN +'10x'; // => NaN Number('40'); // => 40 +'40'; // => 40
所以我通常只是简单地使用+。只要你知道它的作用,我觉得它很容易阅读。