首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数字之间的区别是什么(.)和parseFloat(.)

数字之间的区别是什么(.)和parseFloat(.)
EN

Stack Overflow用户
提问于 2012-08-16 13:44:14
回答 5查看 15.8K关注 0票数 36

此前曾有人问过parseInt(字符串)和数字(String)在JavaScript中的区别是什么?

但答案基本上集中在radixparseInt的能力上,它可以像"123htg"这样的字符串并将其转换为123

我在这里要问的是,当您传递一个没有基数的Number(...)实际数字字符串时,它和parseFloat(...)的返回之间是否有很大的差别。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-08-16 13:48:06

不是的。这两者都将导致调用内部ToNumber(string)函数。

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

Number作为函数而不是构造函数被调用时,它执行类型转换. 返回由ToNumber(value)计算的数字值(而不是数字对象),如果提供了值,则返回+0

来自ES5第15.1.2.3节 (parseFloat (string)):

..。如果trimmedStringtrimmedString的任何前缀都不满足StrDecimalLiteral的语法(参见9.3.1) .

9.3.1是名为"ToNumber应用于String“的部分,这是第一个引号在表示ToNumber(value)时所指的。

更新(见评论)

通过使用Number操作符调用new构造函数,您将得到Number对象的实例,而不是数字文本。例如:

代码语言:javascript
运行
复制
typeof new Number(10); //object
typeof Number(10); //number

这是在第15.7.2款 (数字构造函数)中定义的:

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

票数 28
EN

Stack Overflow用户

发布于 2012-08-16 13:55:09

正如@James已经回答的那样,内部的工作方式并没有那么不同。不过,这是有区别的。使用parseFloat,以一个或多个数字字符开头的(修整)字符串和字母数字字符可以转换为数字,而Number不会成功。如:

代码语言:javascript
运行
复制
parseFloat('3.23abc'); //=> 3.23
Number('3.23abc'); //=> NaN

在这两个转换中,输入字符串都会被裁剪,顺便说一句:

代码语言:javascript
运行
复制
parseFloat('  3.23abc '); //=> 3.23
Number('   3.23 '); //=> 3.23
票数 45
EN

Stack Overflow用户

发布于 2012-08-16 13:52:56

没有太大的差别,只要你确定你的字符串中只有数字。如果存在,Number将返回NaN

使用Number构造函数可能会遇到的另一个问题是,同事可能认为您忘记了new关键字,并在稍后添加它,导致严格的比较失败new Number(123) === 123 -new Number(123) === 123-而Number(123) === 123 ->为真。

通常,我倾向于保留Number构造函数,只需使用最短的语法将其转换为int/float:+numString,或者使用parse*

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11988547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档