哪个是将字符串转换为float的最佳方法?

时间:2014-10-02 20:52:20

标签: javascript

我需要总结两个数字:

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)

其他人吗?

哪一个更容易出错?为什么呢?

3 个答案:

答案 0 :(得分:2)

如果输入不正确,那取决于你想要的结果。

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

使用* 1隐藏了代码的真实意图。将某些内容与一个相乘是无用的操作,因为它根本不会更改该值,因此将转换后的值隐藏在乘法之前的隐式操作中。

这两个人做了什么,被其他方法所覆盖(崩溃除外),所以你永远不需要使用它们。

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

input     parseFloat    Number

"3.14"       3.14        3.14
"3.14x"      3.14         NaN
"x3.14"       NaN         NaN
""            NaN           0

答案 1 :(得分:1)

parseFloat是最好的。如果你的字符串以“非数字”值开头,parseFloat将返回NaN,它代表Not a Number,所以要小心。

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

而且:

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

您可以查看文档here并亲自尝试

答案 2 :(得分:0)

使用" parseFloat ",因为它会最清楚地传达您的intention