number(x)或parseFloat(x)哪个更好?

2020/11/09 13:22 · javascript ·  · 0评论

哪个更好?

我问这个问题只是为了节省一些字节,因为我可以使用+ x代替number(x)。parsefloat会做得更好吗?

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

所以我通常只是+简短地使用只要您知道它的功能,我就会觉得它很容易阅读。

区别在于输入不是“正确的数字”时会发生什么。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

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

Number('') = 0;
Number(false) = 0;
Number('1a') = NaN;

parseFloat('') = NaN;
parseFloat(false) = NaN;
parseFloat('1a') = 1;

parseFloat会慢一些,因为它会搜索字符串中数字的首次出现,而Number构造函数会从包含带空格的数字值或包含假值的字符串中创建一个新的数字实例。

PS:如果您对某些通用类型转换解决方案感兴趣,可以在我的博客中阅读有关类型转换的文章:http//justsimplejs.blogspot.com/2012/08/data-type-conversion.html

对于空字符串,它们是不同的。

+""Number("")返回0,而parseFloat("")返回NaN。

As far as I know, and this is only overheard from colleagues so might be entirely ill informed, that parseFloat is marginally faster.

Though on further researching, it would seem that this performance difference is browser dependant.

http://jsperf.com/parseint-vs-parsefloat/6

Have a look at these jsPerf results, and make you're call. (it includes +x tests as well)

As noted in @xdazz 's answer, +"" and Number("") return 0 while parseFloat("") returns NaN so Again I would go with parseFloat, because an empty string does NOT mean the number 0, only a string with the character "0" in it means 0;

本文地址:http://javascript.askforanswer.com/numberxhuoparsefloatxnagegenghao.html
文章标签: ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!