+ operator vs parseFloat

Jay*_*Are 5 javascript

"敲除扩展器"页面的示例1描述了一种舍入用户输入并确保其仅为数字的方法.

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

parseFloat(+newValue)
Run Code Online (Sandbox Code Playgroud)

newValue 是一个字符串.

当我最初问这个问题,我不知道该怎么+做了-一些进一步的到不同的MDN页面链接从最初的一个答案我表明它是一元运算符等同于number(str)和之间存在一些分歧+strparseFloat(str)(处理以字母字符结尾的字符串和十六进制的解释似乎是头条新闻).

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

Jui*_*ter 8

引用MDN文档parseFloat:

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

使用一元加运算符你可能确定可以parseFloat操作Number,这只有在你想对结果更严格但仍想使用parseFloat

parseFloat('0.32abcd') // -> 0.32
parseFloat(+'0.32abcd') // -> NaN
Run Code Online (Sandbox Code Playgroud)

更新:

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

parseFloat('31.5 miles') // -> 31.5
parseFloat('12.75em') // -> 12.75
Run Code Online (Sandbox Code Playgroud)

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

unary plus是将某些内容转换为数字的最快和首选方式,因为它不会对数字执行任何其他操作.

有关它的速度有多快,请参阅parseFloat与一元测试用例.

  • 但是 parseFloat 应该对字符串进行操作 - 为什么你希望它对数字进行操作? (2认同)
  • @JuicyScripter但该MDN页面正在解决另一个问题并描述如何使用regexp.在这种情况下,我仍然不明白为什么`parseFloat`是必要的以及它添加了什么值.你能不能试着清楚地解释一下,并举例说明`+ xxxxx`与`parseFloat(+ xxxxx)`有什么不同? (2认同)