Ответ 1
Функция parseInt()
анализирует a string
и возвращает integer
, 10 - это Radix или Base
[DOC]
var number = parseInt(id.substring(indexPos) , 10 ) + 1;
У меня есть следующий 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 '+='
)
Кто-нибудь знает, что я делаю неправильно? Есть ли лучший способ сделать это?
Функция parseInt()
анализирует a string
и возвращает integer
, 10 - это Radix или Base
[DOC]
var number = parseInt(id.substring(indexPos) , 10 ) + 1;
Это связано с 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()
, если вам нужно преобразовать десятичные числа в строках в их числовое значение - +
тоже может это сделать, но оно ведет себя несколько иначе: это другая история.
JS будет думать, что 0 является строкой, на которой она фактически является, чтобы преобразовать ее в int, используйте функцию: parseInt(), например:
var numberAsInt = parseInt(number, 10);
// Second arg is radix, 10 is decimal.
Если число невозможно преобразовать в int, оно вернет NaN, поэтому я бы порекомендовал проверку на это тоже в коде, используемом в производстве, или, по крайней мере, если вы не на 100% уверены в вводе.
Если вы уверены, что id.substring(indexPos) - это число, вы можете сделать это так:
var number = Number(id.substring(indexPos)) + 1;
В противном случае я предлагаю проверить правильность оценки функции Number.
Использовать parseInt():
var number = (parseInt(id.substring(indexPos)) + 1);` // creates the number that will go in the title
Хотя parseInt
является официальной функцией для этого, вы можете достичь этого с помощью этого кода:
number*1
Преимущество состоит в том, что вы сохраняете некоторые символы, что может сэкономить пропускную способность, если ваш код имеет много таких разговоров.
Преобразовать Number Class
: -
Например:
var n = Number("103");
console.log(n+1)
Выход: 104
Примечание. - Number
является классом. Когда мы передаем строку, тогда конструктор Number Class
преобразует ее.