Skip to content

Instantly share code, notes, and snippets.

@guitong
Last active December 21, 2018 09:37
Show Gist options
  • Save guitong/1c59ef98342fbc37d2aed0ce97a4bbc4 to your computer and use it in GitHub Desktop.
Save guitong/1c59ef98342fbc37d2aed0ce97a4bbc4 to your computer and use it in GitHub Desktop.
The difference between parseFloat and Number - `parseFloat`和`Number`的区别 ?

原文链接: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

所以,我通常简单地使用+。只要你知道它的作用,就可以增加可读性。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment