Example 1描述了一种舍入用户输入并确保它只是数字的方法。
它运作得很好,但从源头上看,他们做了一件我不理解的特殊事情,就是在第8行他们这样做了:
parseFloat(+newValue)
newValue
是一个字符串。
当我最初提出这个问题时,我并不知道+
做了什么 - 从我得到的一个初步答案中进一步poking和link to a different MDN page表示它是一个一元运算符相当于number(str)
并且+str
和parseFloat(str)
之间存在一些差异(处理以字母字符结尾的字符串和十六进制的解释似乎是头条新闻)。
我仍然不明白为什么+
在这种情况下需要包含在parseFloat
中,尽管我开始认为这可能是一个错字......
答案 0 :(得分:8)
引用parseFloat
的MDN文档:
parseFloat
解析其参数,一个字符串,并返回一个浮点数。如果它遇到符号(+或 - ),数字(0-9),小数点或指数以外的字符,它将返回到该点的值并忽略该字符和所有后续字符。允许前导和尾随空格。
<击>
使用unary plus operator,您可以确保parseFloat
对Number
进行操作,这仅在您希望对结果更严格但仍希望使用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了解它的速度。