哪个更好,数字(x)或parseFloat(x)?

哪个更好?

我问这只是为了削减几个字节,因为我可以使用+ x而不是数字(x)。 parsefloat做的更好吗?

编辑:

判决 – parseFloat。 即使使用+(x)可以节省几个字节,parseFloat也尽可能地从string/数字组合中进行回收。

parseFloat和Number之间的区别

parseFloat / parseInt用于parsing一个string,而Number / +用于强制一个值到一个数字。 他们的行为有所不同。 但首先让我们看看他们的行为在哪里:

 parseFloat('3'); // => 3 Number('3'); // => 3 parseFloat('1.501'); // => 1.501 Number('1.501'); // => 1.501 parseFloat('1e10'); // => 10000000000 Number('1e10'); // => 10000000000 

所以只要你有标准的数字input,没有什么区别。 但是,如果您的input以数字开头,然后包含其他字符,则parseFloat将该数字截断,而Number会给出NaN (不是数字):

 parseFloat('1x'); // => 1 Number('1x'); // => NaN 

另外, Number理解hexinput,而parseFloat不理解:

 parseFloat('0x10'); // => 0 Number('0x10'); // => 16 

Number奇怪的空string或string只包含空格:

 parseFloat(''); // => NaN Number(''); // => 0 parseFloat(' \r\n\t'); // => NaN Number(' \r\n\t'); // => 0 

总的来说,我发现Number更合理,因此我几乎总是亲自使用Number (并且您会发现很多内部JavaScript函数也使用Number )。 如果有人input'1x'我宁愿显示错误,而不是像input'1'那样对待它。 我唯一的一个例外是当我将一个样式转换为一个数字,在这种情况下, parseFloat是有帮助的,因为样式以'3px'的forms出现,在这种情况下,我想删除'px'部分得到3 ,所以我觉得parseFloat在这里很有帮助。 但是真正select哪一个取决于你,以及你想接受哪种forms的input。

请注意,使用一元+运算符与将Number用作函数完全相同:

 Number('0x10'); // => 16 +'0x10'; // => 16 Number('10x'); // => NaN +'10x'; // => NaN Number('40'); // => 40 +'40'; // => 40 

所以我通常只用+来简写。 只要你知道它做了什么,我发现很容易阅读。

不同的是当input不是“正确的数字”时会发生什么。 Number返回NaNparseFloatparsing“尽可能多”。 如果在空string上调用,则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有点慢,因为它在string中search数字的第一个外观,而Number构造函数从包含带空格的数字值或包含假值的string创build新的数字实例。

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

对于空string,它们是不同的。

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

据我所知,这只是从同事那里听到的,所以可能完全不了解情况,parseFloat稍微快一点。

尽pipe在进一步的研究中,这种性能差异似乎是依赖于浏览器的。

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

看看这些jsPerf结果,并让你打电话。 (它也包括+ xtesting)

正如在@xdazz的回答中所提到的, +""Number("")返回0parseFloat("")返回NaN所以我再次使用parseFloat,因为空string不意味着数字0,只有一个string其中字符"0"表示0;