40

我在页面中嵌入了以下 JS:

var round = Math.round;
var id = $(this).attr("id");

var len = id.length;
var indexPos = len -1; // index of the number so that we can split this up and used it as a title

var pasType = id.substring(0, indexPos); // adult, child or infant
var ind = round(id.substring(indexPos)); // converts the string index to an integer
var number = (id.substring(indexPos) + 1); // creates the number that will go in the title
window.alert(number);

id将类似于adult0,我需要将该字符串拆分为adult 和0 - 这部分工作正常。

当我尝试增加 0 时,问题就出现了。如您所见,我使用 Math.round 将其转换为整数,然后向其添加 1 - 我希望 0 在此之后为 1。但是,它似乎没有将其转换为整数,因为我得到01,而不是1. 当使用成人 1 进行测试时,我得到的警报是11.

我正在使用这个问题作为参考,并且也尝试过var number += id.substring(indexPos);,它打破了 JS ( unexpected identifier '+=')

有谁知道我做错了什么?有没有更好的方法来做到这一点?

4

7 回答 7

61

parseInt()函数解析 astring并返回一个integer,10 是基数或基数 [DOC]

var number = parseInt(id.substring(indexPos) , 10 ) + 1;
于 2013-09-10T08:03:43.930 回答
9

这与 JavaScript 的+in 运算符有关 - 如果将数字和字符串“相加”,则该数字将转换为字符串:

0 + 1; //1
'0' + 1; // '01'

要解决此问题,请使用+一元运算符,或使用parseInt()

+'0' + 1; // 1
parseInt('0', 10) + 1; // 1

一元运算+符将其转换为数字(但是,如果它是小数,它将保留小数位),并且parseInt()是不言自明的(转换为数字,忽略小数位)。

第二个参数对于parseInt()在放置前导 0 时使用正确的基数是必要的:

parseInt('010'); // 8 in older browsers, 10 in newer browsers
parseInt('010', 10); // always 10 no matter what

如果parseFloat()您需要将字符串中的小数转换为其数值 -+也可以这样做,但它的行为略有不同:不过那是另一回事了。

于 2013-09-10T08:04:26.420 回答
9

JS 会认为 0 是一个字符串,实际上它是一个字符串,要将其转换为 int,请使用:parseInt() 函数,例如:

var numberAsInt = parseInt(number, 10);  
// Second arg is radix, 10 is decimal.

如果无法将数字转换为 int,它将返回 NaN,因此我建议在生产中使用的代码中也检查一下,或者至少如果您不是 100% 确定输入。

于 2013-09-10T08:04:46.447 回答
6

转换方式Number Class:-

例如:

var n = Number("103");
console.log(n+1)

输出: 104

注:- Number是类。当我们传递字符串时,构造函数Number class会对其进行转换。

于 2018-01-29T06:52:44.193 回答
3

使用 parseInt():

var number = (parseInt(id.substring(indexPos)) + 1);` // creates the number that will go in the title
于 2013-09-10T08:05:53.123 回答
3

虽然parseInt这是官方的功能,但您可以使用以下代码实现相同的功能:

number*1

优点是您节省了一些字符,如果您的代码必须进行大量此类对话,这可能会节省带宽。

于 2017-03-08T07:59:47.720 回答
2

如果你确定 id.substring(indexPos) 是一个数字,你可以这样做:

var number = Number(id.substring(indexPos)) + 1;

否则,我建议检查 Number 函数的计算是否正确。

于 2013-09-10T08:04:22.343 回答