我在页面中嵌入了以下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,我需要将该字符串分成成人和0 - 这部分工作正常。
当我尝试增加0时出现问题。正如您所看到的,我使用Math.round将其转换为整数,然后将其加1 - 我希望此后0为1。但是,它似乎没有将其转换为整数,因为我得到01
,而不是1
。在使用adult1进行测试时,我得到的提醒是11
。
我正在使用this问题作为参考,并且还尝试了var number += id.substring(indexPos);
,这打破了JS(unexpected identifier '+='
)
有谁知道我做错了什么?有没有更好的方法呢?
答案 0 :(得分:33)
parseInt()
函数解析string
并返回integer
,10是基数或基数
[DOC]
var number = parseInt(id.substring(indexPos) , 10 ) + 1;
答案 1 :(得分:7)
这与运算符中的JavaScript +
有关 - 如果数字和字符串被“添加”,则该数字将转换为字符串:
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()
- +
也可以这样做,但它的行为略有不同:但这是另一个故事。
答案 2 :(得分:4)
JS会认为0是一个字符串,实际上是将其转换为int,使用:parseInt()函数,如:
var numberAsInt = parseInt(number, 10);
// Second arg is radix, 10 is decimal.
如果数字无法转换为int,它将返回NaN,因此我建议在生产中使用的代码中检查也是如此,或者至少如果您不是100%确定输入。
答案 3 :(得分:3)
按Number Class
转换: -
例如:
var n = Number("103");
console.log(n+1)
输出 104
注意: - Number
是课程。当我们传递字符串时,Number class
的构造函数将转换它。
答案 4 :(得分:2)
如果你确定if.substring(indexof)是一个数字,你可以这样做:
var number = Number(id.substring(indexPos)) + 1;
否则我建议检查Number函数是否正确评估。
答案 5 :(得分:2)
使用parseInt():
var number = (parseInt(id.substring(indexPos)) + 1);` // creates the number that will go in the title
答案 6 :(得分:2)
虽然parseInt
是执行此操作的官方函数,但您可以使用此代码实现相同的功能:
number*1
优点是您可以保存一些字符,如果您的代码需要进行大量此类对话,则可能会节省带宽。