Was ist der Unterschied zwischen Unary Plus/Number(x) und parseFloat(x)?

Lesezeit: 5 Minuten

Was ist der Unterschied zwischen Unary PlusNumberx und
Namanyay Goel

Ich frage dies nur, um ein paar Bytes zu rasieren.

Ich weiß, dass ich es gebrauchen kann +x (unäres Plus) statt Number(x). Gibt es einen Unterschied zwischen denen und parseFloat?

  • @Christian: Alle Zahlen in Javascript sind Floats mit doppelter Genauigkeit.

    – Gufa

    1. September 2012 um 12:32 Uhr


Was ist der Unterschied zwischen Unary PlusNumberx und
Nathan Wand

Der Unterschied zwischen parseFloat und Number

parseFloat/parseInt dient zum Analysieren einer Zeichenfolge, während Number/+ dient zum Erzwingen eines Werts in eine Zahl. Sie verhalten sich anders. Aber schauen wir uns zuerst an, wo sie sich gleich verhalten:

parseFloat('3'); // => 3
Number('3'); // => 3
parseFloat('1.501'); // => 1.501
Number('1.501'); // => 1.501
parseFloat('1e10'); // => 10000000000
Number('1e10'); // => 10000000000

Solange Sie also eine standardmäßige numerische Eingabe haben, gibt es keinen Unterschied. Wenn Ihre Eingabe jedoch mit einer Zahl beginnt und dann andere Zeichen enthält, parseFloat schneidet die Zahl aus der Zeichenfolge ab, während Number gibt NaN (keine Zahl):

parseFloat('1x'); // => 1
Number('1x'); // => NaN

Und dazu, Number versteht hexadezimale Eingabe während parseFloat nicht:

parseFloat('0x10'); // => 0
Number('0x10'); // => 16

Aber Number verhält sich seltsam mit leeren Zeichenfolgen oder Zeichenfolgen, die nur Leerzeichen enthalten:

parseFloat(''); // => NaN
Number(''); // => 0
parseFloat(' \r\n\t'); // => NaN
Number(' \r\n\t'); // => 0

Im großen und ganzen finde ich Number um vernünftiger zu sein, also benutze ich fast immer Number persönlich (und Sie werden feststellen, dass viele der internen JavaScript-Funktionen verwendet werden Number auch). Wenn jemand tippt '1x' Ich ziehe es vor, einen Fehler anzuzeigen, anstatt ihn so zu behandeln, als ob sie getippt hätten '1'. Das einzige Mal, dass ich wirklich eine Ausnahme mache, ist, wenn ich einen Stil in eine Zahl umwandle, in diesem Fall parseFloat ist hilfreich, weil Stile in einer Form wie kommen '3px'in diesem Fall möchte ich die löschen 'px' Teil und hol dir einfach die 3so finde ich parseFloat hier hilfreich. Aber für welche Sie sich entscheiden, bleibt Ihnen überlassen und welche Eingabeformen Sie akzeptieren möchten.

Beachten Sie, dass die Verwendung des unären + operator ist genau dasselbe wie using Number als eine Funktion:

Number('0x10'); // => 16
+'0x10'; // => 16
Number('10x'); // => NaN
+'10x'; // => NaN
Number('40'); // => 40
+'40'; // => 40

Also verwende ich meistens nur + kurz. Solange Sie wissen, was es tut, finde ich es leicht zu lesen.

  • würde ich nicht in Betracht ziehen Leerzeichen => 0 Verhalten von Number() Als “seltsam” würde ich es sogar als eher zu erwarten betrachten, Whitespace ist ein leerer Wert, aber er ist nicht null/undefiniert => 0 ist ein schönes Ergebnis. Big (+) für Sie für die Vitrinen sowieso 🙂

    – jave.web

    6. Februar 2014 um 19:47 Uhr

  • @NathanWall: Vielleicht möchte ich das erwähnen Number('Infinity') === Infinity wohingegen parseInt('Infinity') === NaN

    – sstur

    18. August 2014 um 21:51 Uhr

  • würde ich nicht verwenden + (unäres Plus) dafür, denn wenn Sie ein Semikolon in der vorherigen Zeile vergessen, könnte stattdessen ein Additionsausdruck ausgewertet werden.

    – Jackson

    27. April 2017 um 23:36 Uhr

  • Für die Fälle, in denen sie sich gleich verhalten, habe ich herausgefunden, dass parseFloat 1% bis 15% langsamer ist und langsamer wird, wenn die Anzahl der Dezimalstellen in einer Zeichenfolge zunimmt. Bei 1M Lauf in meinem System ist parseFloat(‘1.501’) 5% langsamer als Number(‘1.501’) und parseFloat(‘1.50137585467’) ist 15% langsamer als Number(‘1.50137585467’). Also entscheide ich mich für Number().

    – Bytebereich

    9. Mai 2019 um 14:06 Uhr

  • @ChrisBrownie55 Wow, guter Fang. Ich wusste nicht, dass parseFloat das kann. Ich denke, Infinity ist keine ganze Zahl!

    – sstur

    31. Dezember 2019 um 18:49 Uhr

1647206707 734 Was ist der Unterschied zwischen Unary PlusNumberx und
Jon

Der Unterschied besteht darin, was passiert, wenn die Eingabe keine “richtige Zahl” ist. Number kehrt zurück NaN während parseFloat analysiert “so viel wie es kann”. Wenn auf der leeren Zeichenfolge aufgerufen Number kehrt zurück 0 während parseFloat zurückkehrt NaN.

Zum Beispiel:

Number("") === 0               // also holds for false
isNaN(parseFloat("")) === true // and null

isNaN(Number("32f")) === true
parseFloat("32f") === 32

  • Beachten Sie, dass NaN != NaN obwohl

    – Wex

    19. Mai 2013 um 5:16 Uhr

  • @Wex Oh, das meinst du NaN != NaN wertet zu WAHR – Danke für den Tipp !

    – jave.web

    6. Februar 2014 um 19:39 Uhr

  • verwenden istNaN() zum Testen des NaN-Wertes, isNaN(NaN) kehrt zurück true

    – jave.web

    6. Februar 2014 um 19:52 Uhr


1647206708 687 Was ist der Unterschied zwischen Unary PlusNumberx und
Mikrofon

In diesen Beispielen sehen Sie den Unterschied:

Number('') = 0;
Number(false) = 0;
Number('1a') = NaN;

parseFloat('') = NaN;
parseFloat(false) = NaN;
parseFloat('1a') = 1;

parseFloat ist etwas langsamer, weil es nach dem ersten Auftreten einer Zahl in einer Zeichenfolge sucht, während der Number-Konstruktor eine neue Zahleninstanz aus Zeichenfolgen erstellt, die numerische Werte mit Leerzeichen oder falsche Werte enthalten.

Für leere Zeichenfolgen sind sie unterschiedlich.

+"" und Number("") gibt 0 zurück, während parseFloat("") gibt NaN zurück.

1647206708 128 Was ist der Unterschied zwischen Unary PlusNumberx und
Christoph

Soweit ich weiß und dies nur von Kollegen gehört wurde, die möglicherweise völlig schlecht informiert sind, ist parseFloat geringfügig schneller.

Bei weiterer Recherche scheint es jedoch, dass dieser Leistungsunterschied browserabhängig ist.

http://jsperf.com/parseint-vs-parsefloat/6

Sehen Sie sich diese jsPerf-Ergebnisse an und rufen Sie an. (es enthält auch +x-Tests)

Wie in der Antwort von @xdazz erwähnt, +"" und Number("") Rückkehr 0 während parseFloat("") kehrt zurück NaN Also wieder würde ich mit parseFloat gehen, denn ein leerer String bedeutet NICHT die Zahl 0, sondern nur einen String mit dem Zeichen "0" darin bedeutet 0;

  • Hier ist ein ausführlicherer Test Angeln nach einem schnelleren Weg zur Konvertierung … parseFloat() ist immer noch der Gewinner.

    – mindplay.dk

    15. November 2013 um 16:15 Uhr

  • Hier ist ein ausführlicherer Test Angeln nach einem schnelleren Weg zur Konvertierung … parseFloat() ist immer noch der Gewinner.

    – mindplay.dk

    15. November 2013 um 16:15 Uhr

999050cookie-checkWas ist der Unterschied zwischen Unary Plus/Number(x) und parseFloat(x)?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy