哪种更好些呢?
我这样问只是为了节省几个字节,因为我可以使用+x而不是number(x)。parsefloat做得更好吗?
发布于 2012-12-03 10:13:24
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
所以我通常只使用+
作为缩写。只要你知道它是做什么的,我觉得它很容易读懂。
发布于 2012-09-01 20:20:28
不同之处在于当输入不是“正确的数字”时会发生什么。Number
返回NaN
,而parseFloat
则解析“尽可能多的”。如果在空字符串上调用,则Number
返回0
,而parseFloat返回NaN
。
例如:
Number("") === 0 // also holds for false
isNaN(parseFloat("")) === true // and null
isNaN(Number("32f")) === true
parseFloat("32f") === 32
发布于 2012-09-01 20:21:16
在这些示例中,您可以看到不同之处:
Number('') = 0;
Number(false) = 0;
Number('1a') = NaN;
parseFloat('') = NaN;
parseFloat(false) = NaN;
parseFloat('1a') = 1;
parseFloat比较慢,因为它搜索数字在字符串中的第一次出现,而number构造器从包含带空格的数值或包含false值的字符串创建新的Number实例。
附注:如果你对一些通用的类型转换解决方案感兴趣,你可以在我的博客中阅读关于类型转换的文章:http://justsimplejs.blogspot.com/2012/08/data-type-conversion.html
https://stackoverflow.com/questions/12227594
复制相似问题