Ответ 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