Potrzebuję javascript, aby dodać 5 do zmiennej całkowitej, ale zamiast tego traktuje zmienną jako ciąg, więc zapisuje zmienną, a następnie dodaje 5 na końcu „ciągu”. Jak mogę zmusić go do wykonywania matematyki zamiast tego?
var dots = document.getElementById("txt").value; // 5
function increase(){
dots = dots + 5;
}
Wynik: 55
Jak mogę zmusić go do wyjścia 10
?
javascript
string
math
addition
Sean
źródło
źródło
#control
na Twój problem? Jeśli nie, usuń je i nie pokazuj nam. Kontynuuj redukcję kodu, aż uzyskasz absolutnie minimalny przypadek testowy potrzebny do odtworzenia problemu. W większości przypadków spowoduje to znalezienie problemu i nauczenie się w trakcie tego procesu. Jeśli nie rozwiążesz tego samodzielnie, najprawdopodobniej otrzymasz szybką pomoc z prostym przykładem.Odpowiedzi:
Masz linię
w twoim pliku spowoduje to, że kropki będą ciągiem, ponieważ zawartość txt nie jest ograniczona do liczby.
aby przekonwertować go na int, zmień wiersz na:
Uwaga:
10
Tutaj określa liczbę dziesiętną (podstawa-10). Bez tego niektóre przeglądarki mogą nie zinterpretować poprawnie ciągu znaków. Zobacz MDN:parseInt
.źródło
najprostszy:
kropki zostaną zamienione na liczby.
źródło
dots = +dots+5
.NIE ZAPOMNIJ - użyj,
parseFloat();
jeśli masz do czynienia z liczbami dziesiętnymi.źródło
Number
.Dodaję tę odpowiedź, ponieważ nie widzę jej tutaj.
Jednym ze sposobów jest umieszczenie znaku „+” przed wartością
przykład:
x === 15
Uważam, że to najprostszy sposób
W tym przypadku wiersz:
można zmienić na
wymusić na liczbie
UWAGA:
źródło
parseInt()
powinien załatwić sprawęDaje Ci
http://www.w3schools.com/jsref/jsref_parseint.asp
Uwaga:
10
inparseInt(number, 10)
określa liczbę dziesiętną (podstawa-10). Bez tego niektóre przeglądarki mogą nie zinterpretować poprawnie ciągu znaków. Zobacz MDN:parseInt
.źródło
Działa to również dla Ciebie:
źródło
to naprawdę proste
zmusza to javascript do mnożenia, ponieważ nie ma pomyłki dla * logowania w javascript.
źródło
Możesz dodać + za zmienną i wymusi to, aby była liczbą całkowitą
źródło
Po wypróbowaniu większości odpowiedzi tutaj bez powodzenia w moim konkretnym przypadku wymyśliłem to:
Znaki + są tym, co myli js, a to całkowicie je eliminuje. Prosty do wdrożenia, jeśli może być mylący do zrozumienia.
źródło
ZAKTUALIZOWANO od czasu ostatniego przegłosowania ....
Widziałem tylko porcję
wcześniej, ale później pokazano mi, że
txt
pudełko podaje zmiennądots
. Z tego powodu należy się upewnić, że dane wejściowe zostały „wyczyszczone”, aby mieć pewność, że zawierają tylko liczby całkowite, a nie złośliwy kod.Jednym prostym sposobem na to jest przeanalizowanie pola tekstowego ze
onkeyup()
zdarzeniem, aby upewnić się, że zawiera ono znaki numeryczne:gdzie zdarzenie spowodowałoby błąd i wyczyściłoby ostatni znak, jeśli wartość nie jest liczbą:
Oczywiście możesz to zrobić również za pomocą regex, ale wybrałem leniwe wyjście.
Od tego czasu wiesz, że w pudełku mogą znajdować się tylko liczby, powinieneś móc po prostu użyć
eval()
:źródło
eval()
jest niebezpieczne, jeślidots
pochodzi z danych wejściowych użytkownika, szczególnie jeśli pochodzi z zapisanych danych wejściowych. Więcej informacjidots
była zdefiniowaną zmienną, która była zwiększana i po prostu mylona z łańcuchem. Więc zakwalifikuję moją odpowiedź, że nie należy jej używać lekko, jak powiedziałeś, z danych wejściowych użytkownika / przechowywanych, które mogą mieć potencjał wstrzyknięcia złych skryptów. Ale także w tym przypadku taki zastrzyk i tak spowodowałby błąd / wyjątek matematyczny, więc i tak naprawdę nic by nie zrobił.eval()
jest to tak niebezpieczne, musisz spojrzeć na kod w kontekście, którego używał OP. W tym przypadku tak nie jest, ponieważ używa danych wejściowych, które nie pochodzą z pola tekstowego ani żadnej innej formy danych wejściowych użytkownika, w której może wystąpić dowolna forma wstrzyknięcia wartości nienumerycznej! Żałuję, że nie mogę przegłosować Twoich głosów przeciw!eval()
jest w porządku i musisz spojrzeć na kontekst, w którym jest używany, zamiast ślepo wierzyć we wszystko, co czytasz, bez faktycznego zrozumienia tego!var dots = 5 function increase(){ dots = dots+5; }
nie używa pola tekstowego i przypisuje za pomocą zmiennych bezpośrednich, a nie z danych wejściowych użytkownika. Więc z tego wyszedłem. Ale widziałem, że masz rację, że on przypisanie tego pola tekstowegotxt
dodots
, idots
jest zmienną globalną, a więc jest aktualizowany przez tego wejścia. Masz rację. Dzięki.