在我的代码中,特定 var 的值可以来自许多不同的 json 源中的任何一个。对于其中一些源,相关的 json 元素将是一个字符串(例如"temp": "10.2"
),而对于其他源,json 元素将已经是一个浮点数(例如"temp": 10.2
)。
parseFloat()
如果我只是通过 a 传递 json 元素(来自任何来源) ,即使它已经是一个浮点数,它是否会造成任何伤害(可能会破坏) ?它似乎有效;我只是在考虑好的/坏的做法以及将来或在不同平台上可能出现的损坏。
谢谢。
在我的代码中,特定 var 的值可以来自许多不同的 json 源中的任何一个。对于其中一些源,相关的 json 元素将是一个字符串(例如"temp": "10.2"
),而对于其他源,json 元素将已经是一个浮点数(例如"temp": 10.2
)。
parseFloat()
如果我只是通过 a 传递 json 元素(来自任何来源) ,即使它已经是一个浮点数,它是否会造成任何伤害(可能会破坏) ?它似乎有效;我只是在考虑好的/坏的做法以及将来或在不同平台上可能出现的损坏。
谢谢。
将任何数据类型转换为数字的最合适的方法是使用以下Number
函数:
在非构造函数上下文中(即没有
new
运算符),Number
可以用来执行类型转换。
Number("1234") // 1234
Number(1234) // 1234
parseFloat
这种方法至少在这些方面有所不同:
Number(true)
产生 1
parseFloat(true)
尝试从中解析数字"true"
并产生 NaNNumber("123abc")
产生 NaN
parseFloat("123abc")
产生 123您应该能够在浮点数或字符串上调用 parseFloat() 而不会出现任何问题。如果它已经是一个浮点数,它会先转换为字符串,然后再转换为浮点数,因此效率会降低一些,但应该没有太大关系。
您仍然应该检查 NaN 的结果,以防数据中出现意外情况。
如果您确定该值始终是有效数字,则应使用Number(stringOrNumber)
.
如果您需要一些额外的安全性,parseFloat()
您还可以编写自己的功能,该功能也经过性能优化:
function toFloat(value) {
return typeof value === 'number' ? value : parseFloat(value);
}
我还创建了一个jsPerf 测试用例parseFloat()
,它显示在字符串和数字之间以 1:1 的比例作为输入值时,性能比普通的要好 30% 以上。
不,将数字传递给它没有问题
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
无论是 afloat
还是String
usingparseFloat()
都更安全,可以避免各种错误。
正如您所说,它将始终有效,但是如果您将其强制为浮点数,您将避免出现任何异常。
例如:
两者
parseFloat('10.2', 10)
和parseFloat(10.2, 10)
都会完美地工作,会给你同样的结果,即10.2
.
就我个人而言,我从来没有看到这是一个问题,老实说,我总是出于一个原因使用 parsefloat(),那就是安全。你永远无法确定会发生什么,所以总是预测更糟的情况:D