Number(...)和parseFloat(...)之间有什么区别

Nea*_*eal 18 javascript string-conversion

先前已经询问过JavaScript中parseInt(string)和Number(string)之间的区别.

但答案基本上集中在radixparseInt字符串一样的能力"123htg"和转换成123.

如果出现的收益率之间的任何大的区别是什么我问这里是Number(...)parseFloat(...)当你通过它的实际数字字符串,没有基数的.

Koo*_*Inc 23

内部运作并没有那么不同,正如@James Allardic已经回答的那样.但是有一点不同.使用时parseFloat,一个(修剪过的)字符串以一个或多个数字字符开头,后跟字母数字字符,可以转换为数字,Number但不会成功.如:

parseFloat('3.23abc'); //=> 3.23
Number('3.23abc'); //=> NaN
Run Code Online (Sandbox Code Playgroud)

在两次转换中,输入字符串都会被修剪,顺便说一下:

parseFloat('  3.23abc '); //=> 3.23
Number('   3.23 '); //=> 3.23
Run Code Online (Sandbox Code Playgroud)

  • 另一个区别是 `" "` 和 `""` 的结果,在这两种情况下,Number 都会给出 `0`,但 parseFloat 会给出 `NaN`。 (9认同)

Jam*_*ice 18

不会.两者都会导致ToNumber(string)调用内部函数.

ES5第15.7.1节(作为函数调用的数字构造函数):

Number作为函数而不是构造函数调用时,它执行类型转换...

返回由ToNumber(value)if提供的值计算的Number值(不是Number对象),否则返回+0.

ES5第15.1.2.3节(parseFloat(string)):

...如果既没有trimmedString也没有任何前缀trimmedString满足a的语法StrDecimalLiteral(见9.3.1)......

9.3.1是名为"ToNumber应用在String类型"的部分,这是第一次报价是指当它说ToNumber(value).


更新(见评论)

通过Number使用new运算符调用构造函数,您将获得Number对象的实例,而不是数字文字.例如:

typeof new Number(10); //object
typeof Number(10); //number
Run Code Online (Sandbox Code Playgroud)

这在第15.7.2节(数字构造函数)中定义:

Number作为new表达式的一部分调用时,它是一个构造函数:它初始化新创建的对象.