将一个数字传递给parseFloat()而不是字符串
在我的代码中,特定var的值可以源自任何一个不同的json源。 对于其中一些来源,相关的json元素将是一个字符串(例如"temp": "10.2"
),而对于其他来源,json元素将已经是一个浮点数(例如"temp": 10.2
)。
如果我只是通过一个parseFloat()
传递json元素(来自任何源),它是否会造成任何伤害(是否有可能中断parseFloat()
,即使它已经是一个浮点数? 它似乎工作; 我只是想在未来或在不同的平台上考虑好的/坏的练习和可能的破坏。
谢谢。
你应该可以在float或string上调用parseFloat()而不会有任何问题。 如果它已经是一个浮点数,它会先转换为一个字符串,然后再转换为一个浮点数,所以效率稍低一些,但不应该太重要。
您仍然应该检查NaN的结果,以防数据中出现意想不到的情况。
将任何数据类型转换为数字的最合适方法是使用Number
函数:
在非构造函数上下文中(即没有new
运算符),可以使用Number
来执行类型转换。
Number("1234") // 1234
Number(1234) // 1234
这种方法至少在这些方面与parseFloat
不同:
Number(true)
产生1 parseFloat(true)
尝试从"true"
解析数字并生成NaN Number("123abc")
产生NaN parseFloat("123abc")
产生123 如果您确定该值始终是有效的数字,则应使用Number(stringOrNumber)
。
如果你需要使用parseFloat()
来增加一些安全性,你也可以编写你自己的函数,这也是性能优化的:
function toFloat(value) {
return typeof value === 'number' ? value : parseFloat(value);
}
我还创建了一个jsPerf测试用例,该用例显示,对于字符串和数字之间的1:1比率作为输入值,性能比朴素parseFloat()
好> 30%。