首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >number(x)和parseFloat(x)哪个更好?

number(x)和parseFloat(x)哪个更好?
EN

Stack Overflow用户
提问于 2012-09-01 20:12:32
回答 5查看 92.7K关注 0票数 181

哪种更好些呢?

我这样问只是为了节省几个字节,因为我可以使用+x而不是number(x)。parsefloat做得更好吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-12-03 10:13:24

parseFloat和Number之间的区别

parseFloat/parseInt用于解析字符串,而Number/+用于将值转换为数字。他们的行为不同。但首先让我们看看它们的行为是相同的:

代码语言:javascript
复制
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 (而不是数字):

代码语言:javascript
复制
parseFloat('1x'); // => 1
Number('1x'); // => NaN

此外,Number可以理解十六进制输入,而parseFloat则不能:

代码语言:javascript
复制
parseFloat('0x10'); // => 0
Number('0x10'); // => 16

但是Number在处理空字符串或只包含空格的字符串时表现得很奇怪:

代码语言:javascript
复制
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作为函数完全相同:

代码语言:javascript
复制
Number('0x10'); // => 16
+'0x10'; // => 16
Number('10x'); // => NaN
+'10x'; // => NaN
Number('40'); // => 40
+'40'; // => 40

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

票数 387
EN

Stack Overflow用户

发布于 2012-09-01 20:20:28

不同之处在于当输入不是“正确的数字”时会发生什么。Number返回NaN,而parseFloat则解析“尽可能多的”。如果在空字符串上调用,则Number返回0,而parseFloat返回NaN

例如:

代码语言:javascript
复制
Number("") === 0               // also holds for false
isNaN(parseFloat("")) === true // and null

isNaN(Number("32f")) === true
parseFloat("32f") === 32
票数 15
EN

Stack Overflow用户

发布于 2012-09-01 20:21:16

在这些示例中,您可以看到不同之处:

代码语言:javascript
复制
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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12227594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档