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

Converting strings to numbers before Adding

本文关键字:转换 数字 字符串 添加      更新时间:2023-09-26

JSLint说+在Webstorm的提示中感到困惑,但这段代码有效。

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

这是不好的做法,还是有更好的方法转换,使JSLint满意,因为JSLint是基于我们所知道的最佳实践?

在人们匆忙结束这个之前,我想知道有什么更好的方法来处理这个转换

可以使用parseFloat和parseInt函数

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

我认为在这种情况下+是首选的,因为它显式地将操作数强制转换为Number。它相当于Number(x),但不太适合类型。parseIntparseFloat意味着修剪尾随的非数字字符(例如将5px转换为5或将5.5cm转换为5.5),并推断您想要整数或浮点数,+不会。

我说过打字更少了吗?: -)

生成的+标识符 + +标识符只能用一种方式解释,没有歧义。

如果您只是想使用一个不幸被存储为字符串的数字,那么parseInt()和parseFloat()就像用原子弹杀死苍蝇一样。它们用于更繁重的工作,如在进行可选的基转换时提取字符串的数字部分等。JavaScript是一种动态类型语言,可以自动决定数据是数字还是字符串。正如你的问题所知,"+"是一种情况,这种动态类型的优点并不总是那么好。

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

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

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

对于更易于人类阅读的代码,同时仍然比使用任何解析函数快得多,我减去0,并注释说我这样做是为了确保未指定类型的数据将被理解为一个数字。

(实际上,我也做+ +变量,当我确信我的空白不会被折叠之后。这是++方法的唯一缺点,因为几乎所有代码都可以不使用空格编写,但是此操作需要空格或括号。)

添加()后JSLint警告消失。是有意义的。

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

do like

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

更新

如果你想要一个浮点值。正如Parthik Gosar建议的那样,parseFloat而不是parseInt将是最合适的。

使用数量()函数…

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

另一种转换方式,除以或乘以1…

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