"敲除扩展器"页面的示例1描述了一种舍入用户输入并确保其仅为数字的方法.
它工作得很好,但从源头看,他们做了一件我不理解的特殊事情,就是在第8行他们这样做:
parseFloat(+newValue)
Run Code Online (Sandbox Code Playgroud)
newValue 是一个字符串.
当我最初问这个问题,我不知道该怎么+做了-一些进一步的戳和到不同的MDN页面链接从最初的一个答案我表明它是一元运算符等同于number(str)和之间存在一些分歧+str和parseFloat(str)(处理以字母字符结尾的字符串和十六进制的解释似乎是头条新闻).
我仍然不明白为什么+在这种情况下需要包装在parseFloat尽管我开始认为我可能是一个错字...
引用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与一元测试用例.