Was ist der "beste" Weg, um eine Zahl in eine Zeichenfolge umzuwandeln (in Bezug auf Geschwindigkeitsvorteil, Klarheitsvorteil, Speichervorteil usw.)?
Einige Beispiele:
String(n)
n.toString()
""+n
n+""
quelle
Was ist der "beste" Weg, um eine Zahl in eine Zeichenfolge umzuwandeln (in Bezug auf Geschwindigkeitsvorteil, Klarheitsvorteil, Speichervorteil usw.)?
Einige Beispiele:
String(n)
n.toString()
""+n
n+""
so was:
var foo = 45;
var bar = '' + foo;
Obwohl ich es normalerweise aus Bequemlichkeitsgründen normalerweise so mache, scheint es für mehr als 1.000 Iterationen einen Vorteil zu geben.toString()
Siehe Leistungstests hier (nicht von mir, aber gefunden, als ich meine eigenen schrieb): http://jsben.ch/#/ghQYR
Am schnellsten basierend auf dem obigen JSPerf-Test: str = num.toString();
Es sollte beachtet werden, dass der Geschwindigkeitsunterschied nicht übermäßig signifikant ist, wenn man bedenkt, dass die Konvertierung 1 Million Mal in 0,1 Sekunden durchgeführt werden kann .
Update: Die Geschwindigkeit scheint sich je nach Browser stark zu unterscheiden. In Chrome num + ''
scheint basierend auf diesem Test http://jsben.ch/#/ghQYR am schnellsten zu sein
Update 2: Wiederum basierend auf meinem obigen Test sollte beachtet werden, dass Firefox 20.0.1 das .toString()
ungefähr 100-mal langsamer als das '' + num
Beispiel ausführt .
'' + 123e-50
zurückgibt : Rückgabe"1.23e-48"
.null foo
keinen Fehler auslöst.Meiner Meinung nach
n.toString()
wird der Preis für seine Klarheit vergeben, und ich glaube nicht, dass er zusätzlichen Aufwand mit sich bringt.quelle
null
,undefined
), die nicht über kaum mit dieser Antwort arbeiten macht es „unsicher“.null
oderundefined
da es anwendungsspezifisch ist, obwohl ich mir vorstelle, dass dies das(n || defaultNumber).toString()
ist, was die meisten Menschen in einer solchen Situation wollen würden. Ich bin nicht der Meinung, dass wir es in alle Fragen einarbeiten sollten. Hier ging es darum, Zahlen in Zeichenfolgen umzuwandeln, eine gute Architektur und andere Typkonvertierungen, bei denen separate Lektionen erforderlich sind.Explizite Konvertierungen sind für jemanden, der neu in der Sprache ist, sehr klar. Die Verwendung von Typenzwang führt, wie andere vorgeschlagen haben, zu Mehrdeutigkeiten, wenn ein Entwickler die Zwangsregeln nicht kennt. Letztendlich ist die Entwicklerzeit teurer als die CPU-Zeit, daher würde ich auf Kosten der letzteren für die erstere optimieren. Abgesehen davon ist der Unterschied in diesem Fall wahrscheinlich vernachlässigbar, aber wenn nicht, bin ich mir sicher, dass es einige anständige JavaScript-Kompressoren gibt, die diese Art von Dingen optimieren.
Aus den oben genannten Gründen würde ich gehen mit:
n.toString()
oderString(n)
.String(n)
ist wahrscheinlich eine bessere Wahl, da es nicht fehlschlägt, wennn
es null oder undefiniert ist.quelle
null
oderundefined
. Wennn
es sich um einen Fehler in meinem Programm handeltnull
oder daraufundefined
zurückzuführen ist, würde ich es vorziehen, wenn mein Programm in diesem Zustand fehlschlägt, um mir eine bessere Chance zu geben, den Fehler zu finden und zu beheben. Programmabstürze sind Geschenke an die Programmiererin, um ihr zu helfen, die Fehler zu finden :-). Die Alternative besteht darin, Software bereitzustellen, die nicht wie geplant funktioniert, nachdem die Fehler sorgfältig beschönigt wurden. Ich bin also kein Fan davonString(n)
, einen Fehler zu maskieren.String(n)
eignet sich gut für die Verwendung in einem funktionalen Stil, z. B. mit dem Unterstrich-Mähdrescher_.compose(funcThatNeedsAStringParam, String)
.Quelle
quelle
Zunge in der Wange offensichtlich:
Oder in ES6 können Sie einfach Vorlagenzeichenfolgen verwenden :
quelle
'' + number
Methode. Die Ergebnisse dieser Benchmarks variieren jedoch stark, wenn sie mehrmals durchgeführt werden. Sie sind sich also nicht sicher, ob sie zu ernst genommen werden sollten.Andere Antworten deckten bereits andere Optionen ab, aber ich bevorzuge diese:
Kurz, prägnant, bereits an vielen anderen Stellen verwendet (wenn Sie ein modernes Framework / eine moderne ES-Version verwenden), sodass jeder Programmierer dies sicher verstehen wird.
Nicht, dass es (normalerweise) viel ausmacht, aber es scheint auch im Vergleich zu anderen Methoden zu den schnellsten zu gehören .
quelle
n.toString()
es nicht so?n
istundefined
, wird es einen Syntaxfehler mit.toString()
String(n)
in allen Fällen? Der einzige Unterschied ist, dass es weniger klar ist.Die einfachste Möglichkeit, eine Variable in eine Zeichenfolge zu konvertieren, besteht darin, dieser Variablen eine leere Zeichenfolge hinzuzufügen.
quelle
(5.41 + '')
um die String-Methoden wie.substring()
und andere zu verwendenWenn Sie das Ergebnis auf eine bestimmte Anzahl von Dezimalstellen formatieren müssen , um beispielsweise die Währung darzustellen, benötigen Sie so etwas wie die
toFixed()
Methode.digits
ist die Anzahl der Stellen, die nach der Dezimalstelle angezeigt werden sollen.quelle
Ich habe https://jsperf.com verwendet , um einen Testfall für die folgenden Fälle zu erstellen:
https://jsperf.com/number-string-conversion-speed-comparison
Ab dem 24. Juli 2018 ist das Ergebnis laut Chromefox
number + ''
das schnellste in Chromefox, das mit Vorlagenzeichenfolgenliteralen verknüpft ist.Beide
String(number)
undnumber.toString()
sind rund 95% langsamer als die schnellste Option.quelle
Ich mag die ersten beiden, da sie leichter zu lesen sind. Ich neige dazu zu benutzen,
String(n)
aber es ist nur eine Frage des Stils als alles andere.Es sei denn, Sie haben eine Zeile als
Das ist sehr selbsterklärend
quelle
Ich denke, es hängt von der Situation ab, aber trotzdem können Sie die
.toString()
Methode verwenden, da es sehr klar zu verstehen ist.quelle
.toString () ist die integrierte Typumwandlungsfunktion. Ich bin kein Experte für diese Details, aber wenn wir integrierte Typumwandlungsverse mit expliziten Methoden vergleichen, werden integrierte Problemumgehungen immer bevorzugt.
quelle
Wenn ich alles berücksichtigen müsste, würde ich vorschlagen, folgendes zu tun
IMHO, es ist der schnellste Weg, um in String zu konvertieren. Korrigieren Sie mich, wenn ich falsch liege.
quelle
Die einzig gültige Lösung für fast alle möglichen bestehenden und zukünftigen Fälle (Eingabe ist Zahl, Null, undefiniert, Symbol, alles andere) ist
String(x)
. Verwenden Sie keine 3 Möglichkeiten für eine einfache Operation, basierend auf Annahmen vom Werttyp, wie "hier konvertiere ich definitiv Zahl in Zeichenfolge und hier definitiv Boolesch in Zeichenfolge".Erläuterung:
String(x)
behandelt Nullen, undefiniert, Symbole, [alles] und ruft.toString()
nach Objekten.'' + x
Aufrufe.valueOf()
von x (Umwandlung in eine Zahl), Auslösen von Symbolen, können implementierungsabhängige Ergebnisse liefern.x.toString()
wirft auf Nullen und undefiniert.Hinweis:
String(x)
schlägt bei prototyplosen Objekten wie zObject.create(null)
.Wenn Sie Zeichenfolgen wie "Hallo, undefiniert" nicht mögen oder prototyplose Objekte unterstützen möchten, verwenden Sie die folgende Typkonvertierungsfunktion:
quelle
Bei Zahlenliteralen muss der Punkt für den Zugriff auf eine Eigenschaft vom Dezimalpunkt unterschieden werden. Damit haben Sie die folgenden Optionen, wenn Sie String () für das Zahlenliteral 123 aufrufen möchten:
quelle
Im Folgenden finden Sie die Methoden zum Konvertieren einer Ganzzahl in einen String in JS
Die Methoden sind in absteigender Reihenfolge der Leistung angeordnet.
(Die Ergebnisse der Leistungstests werden von @DarckBlezzer in seiner Antwort angegeben.)
var num = 1
Methode 1:
num = `$ {num}`
Methode 2:
num = num + ''
Methode 3:
num = String (num)
Methode 4:
num = num.toString ()
Hinweis: Sie können tostring () nicht direkt von einer Nummer aus aufrufen
Beispiel: 2.toString () löst Uncaught SyntaxError : Ungültiges oder unerwartetes Token aus
quelle
Wenn Sie neugierig sind, welches das leistungsstärkste ist, sehen Sie sich das an, wo ich die verschiedenen Number -> String-Konvertierungen vergleiche.
Sieht aus wie
2+''
oder2+""
sind die schnellsten.https://jsperf.com/int-2-string
quelle
Wir können auch den String- Konstruktor verwenden. Laut diesem Benchmark ist dies der schnellste Weg, eine Zahl in Firefox 58 in einen String zu konvertieren, obwohl sie langsamer ist als
" + num
im beliebten Browser Google Chrome.quelle
Methode
toFixed()
löst auch den Zweck.quelle
Sie können
Number
Objekt aufrufen und dann aufrufentoString()
.Number.call(null, n).toString()
Sie können diesen Trick für andere native Javascript-Objekte verwenden.
quelle
Kommen Sie erst kürzlich darauf, Methode 3 und 4 sind nicht geeignet, da die Zeichenfolgen kopiert und dann zusammengesetzt werden. Für ein kleines Programm ist dieses Problem unbedeutend, aber für jede echte Webanwendung kann diese Aktion, bei der wir uns mit Manipulationen von Frequenzzeichenfolgen befassen müssen, die Leistung und Lesbarkeit beeinträchtigen.
Hier ist der Link zum Lesen .
quelle
Ich werde dies mit mehr Daten erneut bearbeiten, wenn ich Zeit dazu habe, denn im Moment ist das in Ordnung ...
Test in nodejs v8.11.2: 2018/06/06
Ausgabe
quelle
Es scheint ähnliche Ergebnisse bei der Verwendung von node.js. Ich habe dieses Skript ausgeführt:
und bekam die folgenden Ergebnisse:
Ähnliche Zeiten jedes Mal, wenn ich es lief.
quelle