508 Stimmen

Was ist der Unterschied zwischen parseInt() und Number()?

Wie werden parseInt() y Number() sich bei der Umwandlung von Zeichenketten in Zahlen unterschiedlich verhalten?

626voto

Christian C. Salvadó Punkte 763569

Nun, sie sind semantisch verschieden die Number Konstruktor als Funktion aufgerufen führt aus. Typkonvertierung y parseInt führt aus. Parsing , z.B.:

// parsing:
parseInt("20px");       // 20
parseInt("10100", 2);   // 20
parseInt("2e1");        // 2

// type conversion
Number("20px");       // NaN
Number("2e1");        // 20, exponential notation

Auch parseInt ignoriert nachgestellte Zeichen, die keiner Ziffer der aktuell verwendeten Basis entsprechen.

En Number Konstruktor erkennt keine impliziten Oktale, kann aber die explizite Oktalschreibweise erkennen:

Number("010");         // 10
Number("0o10")         // 8, explicit octal

parseInt("010");       // 8, implicit octal
parseInt("010", 10);   // 10, decimal radix used

Und es kann Zahlen in hexadezimaler Notation verarbeiten, genau wie parseInt :

Number("0xF");   // 15
parseInt("0xF"); //15

Ein weit verbreitetes Konstrukt für die Konvertierung von numerischen Typen ist außerdem die Unär + Bediener (S. 72) ist es gleichbedeutend mit der Verwendung der Number Konstruktor als Funktion:

+"2e1";   // 20
+"0xF";   // 15
+"010";   // 10

35voto

letronje Punkte 8683
typeof parseInt("123") => number
typeof Number("123") => number
typeof new Number("123") => object (Number primitive wrapper object)

Die ersten beiden bieten eine bessere Leistung, da sie ein Primitivum statt eines Objekts zurückgeben.

34voto

Naeem Shaikh Punkte 14971

Ein kleiner Unterschied besteht darin, was sie aus undefined o null ,

Number() Or Number(null) Or Number('') // returns 0

während

parseInt() Or parseInt(null) // returns NaN

20voto

Willem van der Veen Punkte 26043

Zusammenfassung:

parseInt() :

  • Nimmt eine Zeichenkette als erstes Argument, das Radix (eine ganze Zahl, die die Basis eines Zahlensystems ist, z. B. Dezimal 10 oder Binär 2) als zweites Argument
  • Die Funktion gibt eine ganze Zahl zurück, wenn das erste Zeichen nicht in eine Zahl umgewandelt werden kann NaN zurückgegeben werden.
  • Wenn die parseInt() Funktion auf einen nicht numerischen Wert stößt, schneidet sie den Rest der Eingabezeichenfolge ab und analysiert nur den Teil bis zum nicht numerischen Wert.
  • Wenn das Radix undefined oder 0 ist, geht JS von folgenden Annahmen aus:
    • Wenn die Eingabezeichenfolge mit "0x" oder "0X" beginnt, ist das Radix 16 (hexadezimal), der Rest der Zeichenfolge wird in eine Zahl umgewandelt.
    • Beginnt der Eingabewert mit einer 0, kann das Radix entweder 8 (oktal) oder 10 (dezimal) sein. Welches Radix gewählt wird, hängt von der Implementierung der JS-Engine ab. ES5 gibt an, dass dann 10 verwendet werden sollte. Dies wird jedoch nicht von allen Browsern unterstützt, Geben Sie daher immer radix an, wenn Ihre Zahlen mit einer 0 beginnen können.
    • Beginnt der Eingabewert mit einer beliebigen Zahl, so ist das Radix 10

Number() :

  • En Number() Konstruktor kann jedes eingegebene Argument in eine Zahl umwandeln. Wenn der Number() Konstruktor kann die Eingabe nicht in eine Zahl umwandeln, NaN zurückgegeben werden.
  • En Number() Konstruktor kann auch hexadezimale Zahlen verarbeiten, sie müssen mit 0x .

Ejemplo:

console.log(parseInt('0xF', 16));  // 15

// z is no number, it will only evaluate 0xF, therefore 15 is logged
console.log(parseInt('0xFz123', 16));

// because the radix is 10, A is considered a letter not a number (like in Hexadecimal)
// Therefore, A will be cut off the string and 10 is logged
console.log(parseInt('10A', 10));  // 10

// first character isnot a number, therefore parseInt will return NaN
console.log(parseInt('a1213', 10));

console.log('\n');

// start with 0X, therefore Number will interpret it as a hexadecimal value
console.log(Number('0x11'));

// Cannot be converted to a number, NaN will be returned, notice that
// the number constructor will not cut off a non number part like parseInt does
console.log(Number('123A'));

// scientific notation is allowed
console.log(Number('152e-1'));  // 15.21

16voto

Saulius Punkte 1408

Wenn es Ihnen auf Leistung ankommt, erzielen Sie wahrscheinlich die besten Ergebnisse mit der bitweisen Rechtsverschiebung "10">>0 . Auch multiplizieren ( "10" * 1 ) oder nicht nicht ( ~~"10" ). Sie alle sind viel schneller als Number y parseInt . Sie haben sogar "Funktion", die 0 für nicht Nummer Argument zurückgibt. Hier sind Leistungstests .

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