Metoda zawsze zwraca ciąg znaków. Niektóre operatory, takie jak operator +
, są przeciążone, aby wykonywać operacje arytmetyczne i łańcuchowe. W przypadku łańcuchów wykonuje konkatenację, stąd wynik "51".
Jeśli masz ciąg znaków i musisz użyć operatora niewymagającego, będziesz musiał użyć parseInt
(lub innej metody konwersji na liczbę).
Jednak operator *
na przykład implikację wykonuje tę koercję, więc w tej sytuacji nie potrzebujesz wywołania parseInt
(patrz na przykład updated fiddle).
Należy zauważyć, że operator 2 przyrostu ++
wymusza jego operand, ale używałeś operatora postfiksu, aby nie wywoływał żadnego efektu. Użyj operatora przedrostka i widać to działa:
$('#withoutParseIntButIncrement').text(++value);
Tak więc, aby podsumować:
// 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's been inserted into the DOM
$('#withoutParseIntButIncrement').text(value++);
// Implicity coerces string to number, before it's been inserted into the DOM
$('#withoutParseIntButIncrement').text(++value);
// Implicity coerces to number
$('#withoutParseIntButMultiply').text(value * 2);
marginesie: to uważane za dobre praktyki na zawsze przejdzie do drugiego argumentu (Radix) do parseInt
.Zapewnia to liczba jest analizowany w prawidłowej podstawy:
parseInt(value, 10); // For base 10
Brzmi rozsądnie. Czasami miałem kilka poważnych problemów podczas obliczania z liczbą wyodrębnioną z DOM, więc Icame zawsze używa parseInt podczas pracy z numerem. Twoja odpowiedź to potwierdza. W ten sposób jestem po bezpiecznej stronie. – iappwebdev
http://stackoverflow.com/questions/11786758/why-parseint08-is-giving-0-whereas-parseint07-is-giving-7?rq=1 To pytanie wyjaśnia również, dlaczego należy zawsze dostarczać bazę ze względu na niektóre dziwne przeglądarki dziwaczne w analizowaniu liczb całkowitych. –