Когда использовать parseInt - программирование
Подтвердить что ты не робот

Когда использовать parseInt

Какое правило я должен соблюдать при извлечении чисел из DOM и вычислении с ними? Как javascript знает, что значение является числом или нет? Должен ли я всегда использовать parseInt?

Учитывая следующий код:

HTML

<div id="myvalue">5</div>
<div id="withParseInt"></div>
<div id="withoutParseInt"></div>
<div id="withoutParseIntButIncrement"></div>

JS и jQuery:

var value = $('#myvalue').text();
$('#withParseInt').text(parseInt(value) + 1);
$('#withoutParseInt').text(value + 1);
$('#withoutParseIntButIncrement').text(value++);

Дает следующий результат:

5
6
51
5

Fiddle: http://jsfiddle.net/ytxKU/3/

4b9b3361

Ответ 1

Метод .text() всегда будет возвращать строку. Некоторые операторы, такие как оператор +, перегружены для выполнения как арифметических, так и строковых операций. В случае строк он выполняет конкатенацию, следовательно, результат "51".

Если у вас есть строка и вам нужно использовать оператор без принуждения, вам нужно будет использовать parseInt (или какой-либо другой метод преобразования в число).

Однако оператор *, например, implicity, выполняет это принуждение, поэтому вам не понадобится вызов parseInt в этой ситуации (см. обновленную скрипту например).

Обратите внимание, что оператор increment ++ делает принудительный операнд, но вы использовали постфиксный оператор, поэтому он не будет иметь никакого эффекта. Используйте префиксный оператор, и вы можете видеть, как он работает:

$('#withoutParseIntButIncrement').text(++value);

Итак, суммируем:

// Parses string to number and adds 1
$('#withParseInt').text(parseInt(value) + 1);

// Coerces number 1 to string "1" and concatenates
$('#withoutParseInt').text(value + 1);

// Implicity coerces string to number, but after it been inserted into the DOM
$('#withoutParseIntButIncrement').text(value++);

// Implicity coerces string to number, before it been inserted into the DOM
$('#withoutParseIntButIncrement').text(++value);

// Implicity coerces to number
$('#withoutParseIntButMultiply').text(value * 2);

Боковое замечание: считается, что хорошая практика всегда передает второй аргумент (радиус) на parseInt. Это гарантирует, что число проанализировано в правильной базе:

parseInt(value, 10); // For base 10

Ответ 2

Одно и только правило:

Каждое значение, которое вы извлекаете из DOM, представляет собой строку.

Ответ 3

Да, вы всегда должны использовать parseInt() или Number(), чтобы быть в безопасности. В противном случае Javascript решит, что с ним делать

  • Само значение представляет собой строку
  • Использование оператора + приведет к объединению двух строк
  • Используя оператор - вычислит численную разницу
  • ...

Ответ 4

Всегда полезно использовать parseInt только для того, чтобы быть в безопасности, тем более, что вы можете указать второй параметр для используемой числовой системы.

Кстати, в вашем последнем примере это должно быть ++value, если вы хотите, чтобы он равнялся 6.