原文链接:https://stackoverflow.com/questions/12227594/which-is-better-numberx-or-parsefloatx
======
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
(not a number):
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
。但是实际选择哪个还要依具体情况而定。
注意,使用一元操作符+
和使用Number
的效果相同:
Number('0x10'); // => 16
+'0x10'; // => 16
Number('10x'); // => NaN
+'10x'; // => NaN
Number('40'); // => 40
+'40'; // => 40
所以,我通常简单地使用+
。只要你知道它的作用,就可以增加可读性。