+运算符与parseFloat

+ operator vs parseFloat

本文关键字:parseFloat 运算符      更新时间:2023-09-26

淘汰扩展器页面的示例1描述了一种四舍五入用户输入并确保其仅为数字的方法。

它工作得很好,但从来源来看,他们做了一件我不明白的特殊事情,那就是在第8行他们这样做:

parseFloat(+newValue)

newValue是一个字符串。

当我最初问这个问题时,我不知道+做了什么——一些进一步的戳和从我得到的一个初始答案到不同MDN页面的链接表明,它是一个等价于number(str)的一元运算符,并且+strparseFloat(str)之间存在一些差异(以字母字符结尾的字符串的处理和十六进制的解释似乎是头条新闻)。

我仍然不明白为什么在这种情况下+需要封装在parseFloat中,尽管我开始认为这可能是一个拼写错误。。。

引用parseFloat:的MDN文档

parseFloat解析其参数(一个字符串),并返回一个浮点数。如果遇到符号(+或-)、数字(0-9)、小数点或指数以外的字符,将返回该点之前的值,并忽略该字符和所有后续字符。允许使用前导空格和尾随空格

使用[一元加运算符][2],您可以确保"parseFloat"对"Number"进行运算,只有当您希望对结果更加严格,但仍希望使用"parseFloat"时,这才有用`
parseFloat('0.32abcd') // -> 0.32
parseFloat(+'0.32abcd') // -> NaN
**更新:**

在对文档进行了一些挖掘并运行了一些测试之后,除了解析可能包含数字的字符串之外,似乎没有理由使用parseFloat,这些字符串带有非数字的数字踪迹,eq:

parseFloat('31.5 miles') // -> 31.5
parseFloat('12.75em') // -> 12.75

对于字符串包含数字+的任何其他情况,是最快和首选的方式(引用MDN文档作为一元加运算符):

一元加号是将某物转换为数字的最快也是最受欢迎的方法,因为它不会对数字执行任何其他操作。

请参阅parseFloat与一元测试用例,了解它的速度

以前的链接断了,所以这里是新的测试,显示一元是如何更快。