Warum gibt parseInt("-1000-500-75-33")
zurück -1000
?String To Number Confusion
Sollte es nicht die Summe dieser Zahlen zurück: -1608
Wie kann ich die Zeichenfolge "-1000-500-75-33"
als die Summe dieser Zahlen zurückzukehren?
Warum gibt parseInt("-1000-500-75-33")
zurück -1000
?String To Number Confusion
Sollte es nicht die Summe dieser Zahlen zurück: -1608
Wie kann ich die Zeichenfolge "-1000-500-75-33"
als die Summe dieser Zahlen zurückzukehren?
parseInt
versuchen, eine Nummer ab dem Anfang der Zeichenfolge zu erhalten.
Da ein gültiges Zeichen ist, mit dem eine Zahl beginnen soll, wird die Zeichenfolge analysiert, bis sie einen ungültigen Wert findet. Die zweite -
ist ungültig, da keine Ganzzahl eine -
darin enthalten kann, nur Ziffern. Es hört also auf und betrachtet die Nummer als "fertig".
Nun, wenn Sie zu Prozess wollen der Ausdruck, können Sie eval
wie so verwenden:
eval("-1000-500-75-33")
Diese -1608
kehrt wie erwartet.
Da sie in einer Zeichenfolge sind, analysiert ParseInt die gesamte Zeichenfolge nicht, findet nur die erste gültige Zahl von Anfang & gibt es zurück. Wenn der Anfang der Zeichenfolge nicht analysiert werden kann, gibt es NaN
parseInt("-1000NOT_NUMBER") = -1000
parseInt("test-1000`) = NaN
Sie haben eval
Funktion verwenden, um zu tun, was Sie wollen, dass String angegeben auswertet, als ob es ein Befehl in die Konsole eingegeben wurden;
eval("-1000-500-75-33") = -1608
Versuchen Sie, eval!it's safe here
eval("-1000-500-75-33").toString()
console.log(eval("-1000-500-75-33").toString());
Und über Art Casting: Nach -1000 Parsen, die offensichtlich "1000 negativ" ist, wird es so schnell Gießen entkommen, da sie erkennen ein Symbol zwischen den Nummern & Strings. So parseInt
sieht "-1000-500-75-33"
als "-1000NotConvertableString"
, so verließ die verbleibenden entfernt, -1000
als Ergebnis der Typ-Casting.
parseInt
führt keine Berechnungen durch, sondern versucht, eine Zeichenfolge in eine ganze Zahl zu konvertieren. Es gibt -1000
zurück, weil der Strich danach nicht als gültige Zahl betrachtet wird. Wenn Sie all diese Zahlen addieren mögen Sie auf dem Strich geteilt könnten, auf Nummer zuordnen, dann reduzieren:
var numString = "-1000-500-75-33";
numString.split('-').map(e => Number(e)).reduce((a, b) => a - b);
'eval ("- 1000-500-75-33") toString()'.? – Hodrobond
@Hodrobond, das hat funktioniert, danke! Wenn du das als Antwort postest, gebe ich dir Requisiten –