369 Stimmen

Wie NaN aus parseInt in 0 für eine leere Zeichenfolge zu machen?

Ist es irgendwie möglich, 0 anstelle von NaN beim Parsen von Werten in JavaScript?

Im Falle einer leeren Zeichenkette parseInt gibt zurück. NaN .

Ist es möglich, etwas wie das in JavaScript zu tun, um zu prüfen, ob NaN ?

var value = parseInt(tbb) == NaN ? 0 : parseInt(tbb)

Oder gibt es vielleicht eine andere Funktion oder ein jQuery-Plugin, das etwas Ähnliches tut?

925voto

Matthew Punkte 14726
var s = '';
var num = parseInt(s) || 0;

Wenn es nicht mit booleschen Werten verwendet wird, ist das logische OR || Operator gibt den ersten Ausdruck zurück parseInt(s) wenn es ausgewertet werden kann zu true , andernfalls gibt es den zweiten Ausdruck 0 . Der Rückgabewert von parseInt('') es NaN . NaN wertet aus zu false Así que num wird am Ende auf 0 .

60voto

gprasant Punkte 14621

Sie können auch die isNaN() Funktion:

var s = ''
var num = isNaN(parseInt(s)) ? 0 : parseInt(s)

33voto

sqren Punkte 21185

Das Problem

Andere Antworten lassen außer Acht, dass 0 ist falsch, so dass die folgende Zahl 20 anstelle von 0 sein wird:

const myNumber = parseInt('0') || 20; // 20

Die Lösung

Ich schlage eine Hilfsfunktion vor, die die meisten der Probleme löst:

function getNumber({ value, defaultValue }) {
  const num = parseInt(value, 10);
  return isNaN(num) ? defaultValue : num;
}

Die Hilfsfunktion liefert die folgenden Ergebnisse:

getNumber({ value: "0", defaultValue: 20 }); // 0
getNumber({ value: "2", defaultValue: 20 }); // 2
getNumber({ value: "2.2", defaultValue: 20 }); // 2
getNumber({ value: "any string", defaultValue: 20 }); // 20
getNumber({ value: undefined, defaultValue: 20 }); // 20
getNumber({ value: null, defaultValue: 20 }); // 20
getNumber({ value: NaN, defaultValue: 20 }); // 20
getNumber({ value: false, defaultValue: 20 }); // 20
getNumber({ value: true, defaultValue: 20 }); // 20

27voto

Chris Werner Punkte 1126

Ich war überrascht, dass niemand die Verwendung von Number() . Allerdings werden Dezimalzahlen analysiert, wenn sie angegeben werden, und verhalten sich daher anders als parseInt() Es geht jedoch bereits von der Basis 10 aus und wandelt "" oder sogar " " in 0 um.

10voto

Ahmad Ibrahim Punkte 1905

Für Menschen, die sich nicht auf parseInt können Sie den bitweisen OR-Operator verwenden (der implizit die ToInt32 zu seinen Operanden).

var value = s | 0;

// NaN | 0     ==>> 0
// ''  | 0     ==>> 0
// '5' | 0     ==>> 5
// '33Ab' | 0  ==>> 0
// '0x23' | 0  ==>> 35
// 113 | 0     ==>> 113
// -12 | 0     ==>> -12
// 3.9 | 0     ==>> 3

Nota: ToInt32 unterscheidet sich von parseInt . (d.h.. parseInt('33Ab') === 33 )

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X