我需要总结两个数字:
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)
其他人吗?
哪一个更容易出错?为什么呢?
答案 0 :(得分:2)
如果输入不正确,那取决于你想要的结果。
有一件事是肯定的,你不想使用eval
。除了与跨站点脚本攻击相关联,因为它将字符串作为代码运行而不仅仅是解析它,如果输入不完全有效,它也会使脚本崩溃。
使用* 1
隐藏了代码的真实意图。将某些内容与一个相乘是无用的操作,因为它根本不会更改该值,因此将转换后的值隐藏在乘法之前的隐式操作中。
这两个人做了什么,被其他方法所覆盖(崩溃除外),所以你永远不需要使用它们。
parseFloat
和Number
函数清楚地表达了您要做的事情,但它们处理输入的方式不同,可能会或可能不会被解释为数字。以下是一些例子:
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。