这是将字符串转换为浮点的最佳方式

Which is the best way to convert a string to float?

本文关键字:最佳 方式 字符串 转换      更新时间:2023-09-26

我需要将两个数字相加:

var n1 = "3.1416";
var n2 = "2.05";
// i could do this as follow:
// method 1:
var sum = parseFloat(n1) + parseFloat(n2)
// method 2:
var sum = eval(n1) + eval(n2)
// method 3:
var sum = (n1 * 1) + (n2 * 1)
// method 4:
var sum = Number(n1) + Number(n2)
// method 5:
var sum = +n1 + (+n2)
// method 6:
var sum = (n1-0) + (n2-0)
// method 7:
var sum = (n1/1) + (n2/1)

还有其他的吗?

其中哪一个不太容易出错?为什么?

这取决于如果输入不正确,您希望得到什么结果。

有一点是肯定的,您不想使用eval。除了与跨站点脚本攻击相关,因为它将字符串作为代码运行,而不仅仅是解析它,如果输入不完全有效,它还会使脚本崩溃。

使用* 1隐藏了代码的真实意图。将某物与1相乘是一种无用的操作,因为它根本不会改变值,因此转换值的目标隐藏在相乘之前的隐式操作中。

这两种方法都包含在其他方法中(崩溃除外),所以无论如何都不需要使用它们。

parseFloatNumber函数清楚地传达了您想要做的事情,但它们处理输入的方式不同,这些输入可能被解释为数字,也可能不是数字。以下是一些例子:

input     parseFloat    Number
"3.14"       3.14        3.14
"3.14x"      3.14         NaN
"x3.14"       NaN         NaN
""            NaN           0

parseFloat是最好的。如果字符串以"非数字"值开头,parseFloat将返回NaN,NaN代表非数字,请小心。

parseFloat('1.2foobar'); // this will be (float) 1.2

这个:

parseFloat('foobar1.2'); // this will be NaN

您可以在这里看到文档并自己尝试

选择"parseFloat",因为它将最清楚地传达您的意图