在我的代码中,特定var的值可以来自许多不同的json源中的任何一个。对于其中一些来源,相关的json元素将是一个字符串(例如"temp": "10.2"
),而对于其他来源,json元素将已经是一个浮点数(例如"temp": 10.2
)。
如果我只是将json元素(来自任何来源)传递给parseFloat()
,即使它已经是浮点数,它是否会造成任何伤害(任何可能会破坏)?它似乎工作;我只考虑未来或不同平台上的好/坏做法和可能的破坏。
感谢。
答案 0 :(得分:1)
您应该可以在浮点数或字符串上调用parseFloat()而不会出现任何问题。如果它已经是一个浮点数,它首先被转换为一个字符串,然后再转换为一个浮点数,所以它的效率会低一些,但它不应该太重要。
如果数据中出现意外情况,您仍应检查NaN的结果。
答案 1 :(得分:1)
将任何数据类型转换为数字的最合适方法是使用Number
函数:
在非构造函数上下文中(即没有
new
运算符),Number
可用于执行类型转换。
Number("1234") // 1234
Number(1234) // 1234
此方法至少在这些方面与parseFloat
不同:
答案 2 :(得分:1)
如果您确定该值始终是有效数字,则应使用Number(stringOrNumber)
。
如果使用parseFloat()
需要一些额外的安全性,您还可以编写自己的功能,这也是性能优化的:
function toFloat(value) {
return typeof value === 'number' ? value : parseFloat(value);
}
我还创建了一个jsPerf test case,显示效果比普通parseFloat()
好30%,字符串和数字之间的比例为1:1作为输入值。
答案 3 :(得分:0)
没有将数字传递给它
没有问题MDN表示,只要它可以转换为数字,就不会发生任何破坏。
如果第一个字符无法转换为数字,则parseFloat返回NaN。
作为替代方案,您可以使用一元运算符+
,它与parseFloat
基本相同,如果不起作用,也会返回NaN
。
例如:
var myFloat = +('10.5');
var myOtherFloat = parseFloat('10.5', 10);
var alreadyAFloat = parseFloat(10.5, 10);
console.log(myFloat === myOtherFloat && myOtherFloat === alreadyAFloat); // true
答案 4 :(得分:0)
使用float
String
或parseFloat()
可以更安全地避免各种错误。
正如你所说它会一直有效,但是如果你强制它成为一个浮点数,你将避免得到任何异常。
例如:
parseFloat('10.2', 10)
和parseFloat(10.2, 10)
都可以使用 完美并且会给你相同的结果10.2
。
答案 5 :(得分:-1)
就我个人而言,我无法看到这是一个问题,说实话我总是会使用parsefloat(),原因之一就是安全。你永远无法确定会发生什么,所以总是预测会更糟:D