Ich benötige Javascript, um einer ganzzahligen Variablen 5 hinzuzufügen, aber stattdessen behandelt es die Variable als Zeichenfolge, schreibt die Variable aus und fügt dann 5 am Ende der "Zeichenfolge" hinzu. Wie kann ich es zwingen, stattdessen zu rechnen?
var dots = document.getElementById("txt").value; // 5
function increase(){
dots = dots + 5;
}
Ausgabe: 55
Wie kann ich die Ausgabe erzwingen 10
?
javascript
string
math
addition
Sean
quelle
quelle
#control
einen Unterschied bei Ihrem Problem? Wenn nicht, löschen Sie sie und zeigen Sie sie uns nicht. Reduzieren Sie Ihren Code weiter, bis Sie den absoluten Mindesttestfall haben, der zur Reproduktion Ihres Problems erforderlich ist. In den meisten Fällen finden Sie das Problem und lernen dabei. Wenn Sie es nicht selbst lösen, erhalten Sie sehr wahrscheinlich schnelle Hilfe bei Ihrem einfachen Beispiel.Antworten:
Du hast die Leitung
In Ihrer Datei werden Punkte als Zeichenfolge festgelegt, da der Inhalt von txt nicht auf eine Zahl beschränkt ist.
Um es in ein Int umzuwandeln, ändern Sie die Zeile in:
Hinweis:
10
Hier wird die Dezimalzahl (Basis-10) angegeben. Ohne dies interpretieren einige Browser die Zeichenfolge möglicherweise nicht richtig. Siehe MDN :parseInt
.quelle
das einfachste:
Die Punkte werden in Zahlen umgewandelt.
quelle
dots = +dots+5
.NICHT VERGESSEN - Verwenden
parseFloat();
Sie diese Option, wenn Sie mit Dezimalstellen arbeiten.quelle
Number
.Ich füge diese Antwort hinzu, weil ich sie hier nicht sehe.
Eine Möglichkeit besteht darin, ein '+' vor den Wert zu setzen
Beispiel:
x === 15
Ich habe festgestellt, dass dies der einfachste Weg ist
In diesem Fall lautet die Zeile:
könnte geändert werden zu
um es auf eine Zahl zu zwingen
HINWEIS:
quelle
parseInt()
sollte den Trick machenGibt Ihnen
http://www.w3schools.com/jsref/jsref_parseint.asp
Hinweis: Das
10
inparseInt(number, 10)
gibt die Dezimalstelle (Basis-10) an. Ohne dies interpretieren einige Browser die Zeichenfolge möglicherweise nicht richtig. Siehe MDN :parseInt
.quelle
Dies funktioniert auch für Sie:
quelle
Es ist wirklich einfach
Dies zwingt Javascript zur Multiplikation, da es keine Verwirrung gibt, wenn * Javascript anmeldet.
quelle
Sie können + hinter der Variablen hinzufügen, wodurch eine Ganzzahl erzwungen wird
quelle
Nachdem ich die meisten Antworten hier ohne Erfolg für meinen speziellen Fall ausprobiert hatte, kam ich auf Folgendes:
Die + -Zeichen verwirren js, und dies beseitigt sie vollständig. Einfach zu implementieren, wenn möglicherweise verwirrend zu verstehen.
quelle
AKTUALISIERT seit dem letzten Downvoting ....
Ich habe nur die Portion gesehen
vorher, aber es wurde mir später gezeigt, dass die
txt
Box die Variable füttertdots
. Aus diesem Grund müssen Sie sicherstellen, dass die Eingabe "bereinigt" wird, um sicherzustellen, dass sie nur Ganzzahlen und keinen schädlichen Code enthält.Eine einfache Möglichkeit, dies zu tun, besteht darin, das Textfeld mit einem
onkeyup()
Ereignis zu analysieren, um sicherzustellen, dass es numerische Zeichen enthält:Dabei würde das Ereignis einen Fehler auslösen und das letzte Zeichen löschen, wenn der Wert keine Zahl ist:
Natürlich könnte man das auch mit Regex machen, aber ich habe den faulen Ausweg gewählt.
Da Sie dann wissen würden, dass nur Zahlen in der Box sein könnten, sollten Sie in der Lage sein, nur zu verwenden
eval()
:quelle
eval()
ist gefährlich, wenndots
es sich um Benutzereingaben handelt, insbesondere wenn es sich um gespeicherte Eingaben handelt. Weitere Informationendots
war eine definierte Variable, die inkrementiert und nur mit einer Zeichenfolge verwechselt wurde. Daher qualifiziere ich meine Antwort, dass sie, wie Sie sagten, nicht leichtfertig von Benutzern / gespeicherten Eingaben verwendet werden sollte, die das Potenzial für eine böse Skriptinjektion haben könnten. Aber auch in diesem Fall würde eine solche Injektion ohnehin einen mathematischen Fehler / eine mathematische Ausnahme verursachen, sodass sie in keiner Weise wirklich etwas bewirken würde.eval()
so gefährlich halten, müssen Sie sich den Code in dem Kontext ansehen, den das OP verwendet hat. Dies liegt in diesem Fall nicht daran, dass er Eingaben verwendet, die nicht aus einem Textfeld oder einer anderen Form der Benutzereingabe stammen, bei der möglicherweise ein nicht numerischer Wert injiziert wird! Ich wünschte, ich könnte Ihre Abstimmungen ablehnen!eval()
es in Ordnung ist, und Sie müssen sich den Kontext ansehen, in dem es verwendet wird, anstatt blindlings alles zu glauben, was Sie lesen, ohne es wirklich zu verstehen!var dots = 5 function increase(){ dots = dots+5; }
verwendet kein Textfeld und weist direkte Variablen zu, nicht aus Benutzereingaben. Das ist es, was ich gemacht habe. Aber ich sah , du hast recht , dass er das Textfeld ist die Zuordnungtxt
zudots
, unddots
ist eine globale Variable, und so wird von dieser Eingabe aktualisiert. Du hast recht. Vielen Dank.