Ist es möglich, 0 zurückzugeben, anstatt NaN
Werte in JavaScript zu analysieren?
Im Falle der leeren Zeichenfolge wird parseInt
zurückgegeben NaN
.
Ist es möglich, so etwas in JavaScript zu überprüfen NaN
?
var value = parseInt(tbb) == NaN ? 0 : parseInt(tbb)
Oder gibt es vielleicht eine andere Funktion oder ein anderes jQuery-Plugin, das etwas Ähnliches tun kann?
javascript
nan
Joper
quelle
quelle
NaN != NaN
. Du würdest brauchenisNaN(value)
.parseInt()
zweimaliger Aufruf der Funktion (im erfolgreichen / normalenNaN
Fall) ist niemals eine gute Idee. Abgesehen von Ineffizienz ist es für Unvorsichtigetbb
schrecklich, wenn ein Funktionsaufruf mit Nebenwirkungen übergeben wird. Ich würde hier keine Lösung verwenden, wo ichparseInt()
zweimal sehe .Antworten:
Wenn der
||
Operator logisch ODER ( ) nicht mit booleschen Werten verwendet wird, gibt er den ersten Ausdruck (parseInt(s)
) zurück, wenn er als wahr ausgewertet werden kann, andernfalls gibt er den zweiten Ausdruck (0) zurück. Der Rückgabewert vonparseInt('')
ist NaN. NaN wird als falsch ausgewertet undnum
am Ende auf 0 gesetzt.quelle
0
statt bekommenNaN
. Dies wird durch Matts Code perfekt gelöst.var nextIphone = parseInt("4S") + 1; // wow it works!
Sie können auch die
isNaN()
Funktion verwenden:quelle
parseInt(s)
zweimal anrufen ? Außerdem sollte es seinparseInt(s, 10)
parseInt()
wenn Sie zweimal anrufen .Ich war überrascht, dass niemand die Verwendung erwähnte
Number()
. Zugegeben, es analysiert Dezimalstellen, wenn dies vorgesehen ist, verhält sich also anders alsparseInt()
, nimmt jedoch bereits die Basis 10 an und wandelt "" oder sogar "" in 0 um.quelle
Für Personen, die nicht darauf beschränkt sind
parseInt
, können Sie den bitweisen ODER-Operator verwenden (der implizitToInt32
seine Operanden aufruft ).Hinweis:
ToInt32
unterscheidet sich vonparseInt
. (dhparseInt('33Ab') === 33
)quelle
'10000000000' | 0 === 1410065408
.Math.pow(2, 31)
läuft über.Das Problem
Andere Antworten berücksichtigen nicht, dass dies
0
falsch ist, und daher lautet das Folgende 20 anstelle von 0:Die Lösung
Ich schlage eine Hilfsfunktion vor, die die meisten Probleme löst:
Die Hilfsfunktion liefert folgende Ergebnisse:
quelle
parseInt(string, radix)
, bedenken Sie:parseInt("0x10") === 16
AuchparseInt("010")
ergeben könnte8
in einigen BrowserndefaultTo
Funktion, die genau dies tut:_.defaultTo(NaN, -1)
return-1
, aber_.defaultTo(0, -1);
return0
.parseInt
zweimalIst der Job meiner Meinung nach viel sauberer als parseInt? Verwenden Sie den Operator +
quelle
quelle
Führen Sie eine separate Prüfung für eine leere Zeichenfolge durch (da es sich um einen bestimmten Fall handelt) und setzen Sie sie in diesem Fall auf Null.
Sie könnten am Anfang "0" eingeben, aber dann müssen Sie ein Präfix hinzufügen, um anzuzeigen, dass es sich um eine Dezimalzahl und nicht um eine Oktalzahl handelt
quelle
Warum nicht die Funktion überschreiben? In diesem Fall können Sie immer sicher sein, dass es zurückkehrt,
0
wennNaN
:Jetzt überall in Ihrem Code:
quelle
|| 0
wie in Matts Antwort hinzuzufügen . Ich sehe das Überschreiben von Objekten, die Sie nicht besitzen, als letzten Ausweg oder wenn Sie dies nicht tun, würde dies erheblich mehr Zeit und Komplexität kosten.Ich hatte ein ähnliches Problem (Firefox v34) mit einfachen Zeichenfolgen wie:
Also kam ich auf einen kurzen Hack von:
Und dann wurde alles dumm kompliziert, mit Floats + Ints für nicht einfache Sachen umzugehen:
Es wird 0 zurückgeben für Dinge wie:
quelle
quelle
||
Ansatz. Ich weiß, dass dies eine alte Frage und Antwort ist, aber diese Antwort vermeidet es, parseInt zweimal aufzurufen, und verwendet isNaN korrekt. Es braucht nur den RadixparseInt(x, 10)
, um gründlich zu sein. (Meine Präferenz ist eine separate interne Variable anstattx
Ich habe einen 2-Prototyp erstellt, um dies für mich zu erledigen, einen für eine Zahl und einen für einen String.
Wenn Sie den Sicherheitscheck nicht verwenden möchten, verwenden Sie
Anwendungsbeispiel:
quelle
Erklärung für diejenigen, die es nicht trivial finden:
Durch Multiplizieren mit eins, einer Methode namens "implizite Umwandlung", wird versucht, den Operanden vom unbekannten Typ in den primitiven Typ 'number' umzuwandeln. Insbesondere würde eine leere Zeichenfolge die Nummer 0 werden, was sie zu einem geeigneten Typ für parseInt () ... macht.
Ein sehr gutes Beispiel wurde oben auch von PirateApp gegeben, der vorschlug, das + -Zeichen voranzustellen, wodurch JavaScript gezwungen wurde, die implizite Umwandlung von Number zu verwenden.
quelle
parseInt('str'*1)
parseInt
etwas anrufen , das bereits eine Nummer ist? Dies führt zu einer weiteren Konvertierung zurück in einen String, um diese erneut in eine Nummer zu konvertieren.Schreiben Sie auch auf diese Weise eine Funktion und rufen Sie sie auf, wo immer dies erforderlich ist. Ich gehe davon aus, dass dies der Eintrag in die Formularfelder ist, um Berechnungen durchzuführen.
Was ist falsch daran?
quelle
NaN
.Hier ist eine tryParseInt-Methode, die ich verwende. Dabei wird der Standardwert als zweiter Parameter verwendet, sodass alles sein kann, was Sie benötigen.
quelle
eine Hilfsfunktion, mit der der Radix weiterhin verwendet werden kann
quelle
Sie können sehr sauberen Code haben, ich hatte ähnliche Probleme und ich löste es mit:
quelle
Für andere Leute, die nach dieser Lösung suchen, verwenden Sie einfach: ~~ ohne parseInt, es ist der sauberste Modus.
Wenn NaN, wird stattdessen 0 zurückgegeben.
quelle