将数字而不是字符串传递给parseFloat()
Passing a number to parseFloat() instead of string
在我的代码中,特定var的值可以来自许多不同json源中的任何一个。对于其中一些源,相关的json元素将是一个字符串(例如"temp": "10.2"
(,而对于其他源,json元素已经是一个浮点值(例如"temp": 10.2
(。
如果我只是通过parseFloat()
传递json元素(来自任何源(,即使它已经是一个float,它会有什么害处吗?它似乎奏效了;我只是在考虑好的/坏的做法,以及未来或在另一个平台上可能出现的故障。
谢谢。
您应该能够在浮点或字符串上调用parseFloat((而不会出现任何问题。如果它已经是一个float,它会先转换成字符串,然后再转换成float,所以效率会低一点,但应该不会太重要。
您仍然应该检查NaN的结果,以防数据中出现意外情况。
将任何数据类型转换为数字的最合适方法是使用Number
函数:
在非构造函数上下文(即没有
new
运算符(中,CCD_ 6可以用于执行类型转换。
Number("1234") // 1234
Number(1234) // 1234
该方法与parseFloat
的不同之处至少在于:
- 如果输入已经是数字(ref(,则数字函数不执行"双重转换">
- Parse-float将输入转换为字符串,然后提取数字(ref(
- Number函数返回大多数数据类型的常识值,例如
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%以上。
不,将数字传递给没有问题
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
无论是float
还是String
,使用parseFloat()
都更安全,可以避免各种错误。
正如您所说,它总是有效的,但如果您强制它为浮点值,则可以避免出现任何异常。
例如:
parseFloat('10.2', 10)
和parseFloat(10.2, 10)
都可以工作并将给您相同的结果,即CCD_ 24。
就我个人而言,我不认为这是一个问题,所以说实话,我总是使用parsefloat((,原因只有一个,那就是安全。你永远无法确定会发生什么,所以总是预测更坏的情况:D
- 如何在JavaScript中将字符串转换为函数引用
- jQuery中是否内置了任何字符串格式化函数
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- ng打开空字符串
- 正则表达式在字符串中找到base64
- 如何将字符串值从php页面发送到java脚本页面
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 字符串在将其传递给另一个活动Android JavaScript时读取Null
- 对id以某个字符串开头的元素进行计数
- Javascript逻辑运算符和字符串/数字
- 反向字符串比较
- 如何有效地将游戏数据存储在URL查询字符串中
- 可变大小的JavaScript字符串如何成为基元类型
- 试图了解如何使用parseFloat将字符串转换为数字
- parseFloat未将sql中的字符串值更改为float
- 当我的字符串太长时,ParseFloat 的奇怪行为
- Javascript方法链:正确的方法链toFixed()和parseFloat()返回一个数字,而不是一个字符串
- 当字符串包含非数字字符时,parseFloat()是如何工作的?
- 使用javascript使用parseFloat和parseInt无法正常工作的字符串获取价格
- 将数字而不是字符串传递给parseFloat()