实施例1 http://knockoutjs.com/documentation/extenders.html淘汰扩展器页面的 描述了一种对用户输入进行四舍五入并确保它只是数字的方法。
它工作得很好,但是查看源代码,他们做了一件我不明白的奇怪的事情,那就是在第 8 行,他们这样做了:
parseFloat(+newValue)
newValue
是一个字符串。
当我最初问这个问题时我不知道什么+
做了 - 进一步poking https://stackoverflow.com/questions/12227594/which-is-better-numberx-or-parsefloatx and a 链接到不同的 MDN 页面 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_plus_()从我得到的最初答案之一表明它是一个一元运算符,相当于number(str)
并且之间存在一些差异+str
and parseFloat(str)
(以字母字符结尾的字符串的处理和十六进制的解释似乎是头条新闻)。
我还是不明白为什么+
在这种情况下需要包裹在parseFloat
虽然我开始认为这可能是一个错字......
引用 MDN 文档parseFloat https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/parseFloat:
parseFloat
解析其参数(一个字符串),并返回一个浮点数。如果遇到除符号(+或-)、数字(0-9)、小数点或指数以外的字符,它返回到该点的值并忽略该字符和所有后续字符。允许前导和尾随空格。
Using [unary plus operator][2] you may be sure that `parseFloat` operates on `Number`, which is only useful if you want to be more strict about results but still want to use a `parseFloat`
parseFloat('0.32abcd') // -> 0.32
parseFloat(+'0.32abcd') // -> NaN
**Update:**
经过一番深入研究文档并运行一些测试后,似乎没有理由使用parseFloat
除了解析可能包含带有非数字尾数的数字的字符串之外,eq:
parseFloat('31.5 miles') // -> 31.5
parseFloat('12.75em') // -> 12.75
对于字符串包含数字的任何其他情况+
is a 最快且首选方式(引用一元加运算符的 MDN 文档 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_plus):
一元加是将某些内容转换为数字的最快且首选的方法,因为它不对数字执行任何其他操作。
See parseFloat 与一元测试用例 http://jsperf.com/parsefloat-versus-unary/3它有多快。
之前的链接已损坏,所以这是新的测试 https://jsben.ch/T7P7I这表明一元速度更快。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)