这是将字符串转换为浮点的最佳方式
Which is the best way to convert a string to float?
我需要将两个数字相加:
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相乘是一种无用的操作,因为它根本不会改变值,因此转换值的目标隐藏在相乘之前的隐式操作中。
这两种方法都包含在其他方法中(崩溃除外),所以无论如何都不需要使用它们。
parseFloat
和Number
函数清楚地传达了您想要做的事情,但它们处理输入的方式不同,这些输入可能被解释为数字,也可能不是数字。以下是一些例子:
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",因为它将最清楚地传达您的意图。
相关文章:
- 在localhost Dev Box上测试JSONP请求的最佳方式
- 为react组件传递道具的最佳方式
- 让Webpack管理Quirky AMD定义的最佳方式
- 在承诺链中处理早期回报的最佳方式
- 在ng重复循环中显示条件内容的最佳方式是什么
- 在phonegap中为android调用onload函数的最佳方式
- 链接两个网页或网络应用程序的最佳方式
- 什么's是连接供应商js文件的最佳方式
- 什么's是在javascript中迭代项的最佳方式
- 在node.js中编写单元测试的最佳方式是什么
- 在页面上记录数据并实现pushstate()的最佳方式
- 使用AJAX在Rails中提交动态表单的最佳方式是什么
- 什么'这是加载jQuery的最佳方式
- 将大数组(字符串和类型数组的混合物)存储到blob或文件中/从blob或文件检索大数组的最佳方式
- 在网站上显示.mov作为加载屏幕的最佳方式
- 使用Angular存储用户以前是否选中过复选框,然后再调用它的最佳方式是什么
- 以角度渲染表中数据的最佳方式
- 删除集合中旧邮件/帖子的最佳方式
- 显示全屏Ajax加载程序的最佳方式
- PHP和JS中表单验证的最佳方式