在添加之前将字符串转换为数字

时间:2013-05-14 04:49:23

标签: javascript

JSLint说+在Webstorm的提示中变得混乱,但这段代码有效。

var totalheightInInches = +selectedFeetToInches + +this.inchSelect.get("value");

这是一种不好的做法,还是有更好的转换方式,以便JSLint得到满足,因为JSLint基于我们所知的最佳实践?

在人们匆匆忙忙关闭之前,我想知道处理这种转换的一些更好的方法。

6 个答案:

答案 0 :(得分:2)

您可以使用parseFloat和parseInt函数

parseFloat("2", 10) //returns the Number 2 

答案 1 :(得分:1)

我认为+在这种情况下是首选,因为它显式地将操作数强制转换为Number。它相当于Number(x)但输入更少。 parseIntparseFloat用于修剪尾随的非数字字符(例如,将5px转换为55.5cm转换为5.5)并推断你想要一个整数或浮点数,+没有。

我说它输入的次数少了吗? :-)

生产+ 标识符 + + 标识符只能以一种方式解释,它不含糊。

答案 2 :(得分:1)

如果你只是试图使用一个不幸被存储为字符串的数字,那么parseInt()和parseFloat()就像用一颗原子弹杀死一只苍蝇。它们用于更重的工作,例如在执行可选的基本转换时提取字符串的数字部分等.JavaScript是一种动态类型语言,它自动决定数据是数字还是字符串。正如你所知道的那样,“+”是这种动态类型的善良并不总是那么好的情况之一。

如果你有一个数值,不幸的是存储为一个字符串,那么我们可以注意并利用内部的JavaScript(根据ECMA标准),“+”模糊地试图猜测是否添加或串联是有意的,但对于减法总是意味着将所有变量解释为数值数据类型或NaN(就像建议的转换函数作为其工作的一小部分一样)。

所以我没有看到使用parseInt()减慢代码速度的任何意义,除非我真的想从另一个字符串中解析一个整数来进行基本转换。这就像在每个if语句中使用Boolean()将每个表达式转换为布尔值。

对于程序的深层内部,我使用减法专门用于添加有时可能存储为字符串的任何变量,并且在每个公式中,根据结果,我只需将结果变量替换为相反的结果变量。结果是零额外代码和最高执行效率,代价是混乱(一旦有人认识到这种做法,混乱就会消失)。

对于更加人性化的代码,虽然仍然比使用任何一种解析函数快得多,但我用一条注释减去0,提到我这样做是为了确保将未指定类型的数据理解为数字。

(实际上,当我确定我的空格不会在以后崩溃时,我也会做+ +变量。这是+ +方法的唯一缺点,因为几乎所有代码都可以在没有空格的情况下编写,但此操作需要空格或括号。)

答案 3 :(得分:0)

喜欢

var totalheightInInches = parseInt(selectedFeetToInches,10) + parseInt(this.inchSelect.get("value"),10);

更新

如果您期望浮点值。如Parthik Gosar建议parseFloat代替parseInt最适合。

答案 4 :(得分:0)

添加()消息导致JSLint警告消失。有道理。

var totalheightInInches = (+selectedFeetToInches) + (+this.inchSelect.get("value"));`

答案 5 :(得分:-1)

使用Number()功能......

Number("100"); // returns 100

var totalheightInInches = Number(selectedFeetToInches) + Number(this.inchSelect.get("value"));

另一种将它转换,除以或乘以1 ,,,

的方法
var totalheightInInches = selectedFeetToInches/1 + this.inchSelect.get("value")/1;
相关问题