Преобразование Javascript String в int

У меня есть следующий 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. При тестировании этого со взрослым1 я получаю сообщение 11.

Я использую этот вопрос для справки, а также попробовал var number += id.substring(indexPos);, который разбивает JS (unexpected identifier '+=')

Кто-нибудь знает, что я делаю неправильно? Есть ли лучший способ сделать это?

Ответы

Ответ 1

Функция parseInt() анализирует a string и возвращает integer, 10 - это Radix или Base [DOC]

var number = parseInt(id.substring(indexPos) , 10 ) + 1;

Ответ 2

Это связано с 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(), если вам нужно преобразовать десятичные числа в строках в их числовое значение - + тоже может это сделать, но оно ведет себя несколько иначе: это другая история.

Ответ 3

JS будет думать, что 0 является строкой, на которой она фактически является, чтобы преобразовать ее в int, используйте функцию: parseInt(), например:

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

Если число невозможно преобразовать в int, оно вернет NaN, поэтому я бы порекомендовал проверку на это тоже в коде, используемом в производстве, или, по крайней мере, если вы не на 100% уверены в вводе.

Ответ 4

Если вы уверены, что id.substring(indexPos) - это число, вы можете сделать это так:

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

В противном случае я предлагаю проверить правильность оценки функции Number.

Ответ 5

Использовать parseInt():

var number = (parseInt(id.substring(indexPos)) + 1);` // creates the number that will go in the title

Ответ 6

Хотя parseInt является официальной функцией для этого, вы можете достичь этого с помощью этого кода:

number*1

Преимущество состоит в том, что вы сохраняете некоторые символы, что может сэкономить пропускную способность, если ваш код имеет много таких разговоров.

Ответ 7

Преобразовать Number Class: -

Например:

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

Выход: 104

Примечание. - Number является классом. Когда мы передаем строку, тогда конструктор Number Class преобразует ее.