+ operator vs parseFloat

时间:2015-10-28 15:16:25

标签: javascript

淘汰扩展器页面的

Example 1描述了一种舍入用户输入并确保它只是数字的方法。

它运作得很好,但从源头上看,他们做了一件我不理解的特殊事情,就是在第8行他们这样做了:

parseFloat(+newValue)

newValue是一个字符串。

当我最初提出这个问题时,我并不知道+做了什么 - 从我得到的一个初步答案中进一步pokinglink to a different MDN page表示它是一个一元运算符相当于number(str)并且+strparseFloat(str)之间存在一些差异(处理以字母字符结尾的字符串和十六进制的解释似乎是头条新闻)。

我仍然不明白为什么+在这种情况下需要包含在parseFloat中,尽管我开始认为这可能是一个错字......

1 个答案:

答案 0 :(得分:8)

引用parseFloat的MDN文档:

  

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

<击> 使用unary plus operator,您可以确保parseFloatNumber进行操作,这仅在您希望对结果更严格但仍希望使用parseFloat

<击>
parseFloat('0.32abcd') // -> 0.32
parseFloat(+'0.32abcd') // -> NaN

<击> 更新

在对文档进行一些挖掘并运行一些测试之后,似乎没有理由使用parseFloat而不是解析可能包含带非数字路径的数字的字符串来编号,等等:

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

对于您的字符串包含数字+的任何其他情况,最快且优先方式(引用MDN docs for unary plus operator):

  

一元加号是将某些东西转换为数字的最快和首选方式,因为它不对该数字执行任何其他操作。

请参阅parseFloat versus unary test case了解它的速度。