Was ist der "beste" Weg, um eine Zahl in eine Zeichenkette zu konvertieren (in Bezug auf die Geschwindigkeit Vorteil, Klarheit Vorteil, Speicher Vorteil, etc) ?
Einige Beispiele:
-
String(n)
-
n.toString()
-
""+n
-
n+""
Was ist der "beste" Weg, um eine Zahl in eine Zeichenkette zu konvertieren (in Bezug auf die Geschwindigkeit Vorteil, Klarheit Vorteil, Speicher Vorteil, etc) ?
Einige Beispiele:
String(n)
n.toString()
""+n
n+""
Ich werde dies mit mehr Daten überarbeiten, wenn ich Zeit dazu habe, aber im Moment ist das in Ordnung...
Test in nodejs v8.11.2: 2018/06/06
let i=0;
console.time("test1")
for(;i<10000000;i=i+1){
const string = "" + 1234;
}
console.timeEnd("test1")
i=0;
console.time("test1.1")
for(;i<10000000;i=i+1){
const string = '' + 1234;
}
console.timeEnd("test1.1")
i=0;
console.time("test1.2")
for(;i<10000000;i=i+1){
const string = `` + 1234;
}
console.timeEnd("test1.2")
i=0;
console.time("test1.3")
for(;i<10000000;i=i+1){
const string = 1234 + '';
}
console.timeEnd("test1.3")
i=0;
console.time("test2")
for(;i<10000000;i=i+1){
const string = (1234).toString();
}
console.timeEnd("test2")
i=0;
console.time("test3")
for(;i<10000000;i=i+1){
const string = String(1234);
}
console.timeEnd("test3")
i=0;
console.time("test4")
for(;i<10000000;i=i+1){
const string = `${1234}`;
}
console.timeEnd("test4")
i=0;
console.time("test5")
for(;i<10000000;i=i+1){
const string = 1234..toString();
}
console.timeEnd("test5")
i=0;
console.time("test6")
for(;i<10000000;i=i+1){
const string = 1234 .toString();
}
console.timeEnd("test6")
Ausgabe
test1: 72.268ms
test1.1: 61.086ms
test1.2: 66.854ms
test1.3: 63.698ms
test2: 207.912ms
test3: 81.987ms
test4: 59.752ms
test5: 213.136ms
test6: 204.869ms
Die einzige gültige Lösung für fast alle mögliche bestehende und zukünftige Fälle (Eingabe ist Zahl, Null, undefiniert, Symbol, irgendetwas anderes) ist String(x)
. Verwenden Sie nicht 3 Wege für einfache Operationen, die auf Annahmen über den Werttyp beruhen, wie z.B. "hier konvertiere ich definitiv eine Zahl in einen String und hier definitiv einen Booleschen Wert in einen String".
Erläuterung:
String(x)
behandelt Nullen, Undefinierte, Symbole, [alles] und ruft .toString()
für Objekte.
'' + x
ruft auf. .valueOf()
auf x (casting to number), throws on Symbols, kann implementierungsabhängige Ergebnisse liefern.
x.toString()
wird bei Nullen und Undefinierten ausgelöst.
Anmerkung: String(x)
schlägt immer noch bei prototyplosen Objekten wie Object.create(null)
.
Wenn Sie Zeichenketten wie 'Hello, undefined' nicht mögen oder prototyplose Objekte unterstützen wollen, verwenden Sie die folgende Typkonvertierungsfunktion:
/**
* Safely casts any value to string. Null and undefined are converted to ''.
* @param {*} value
* @return {string}
*/
function string (str) {
return value == null ? '' : (typeof value === 'object' && !value.toString ? '[object]' : String(value));
}
Bei Zahlenliteralen muss der Punkt für den Zugriff auf eine Eigenschaft vom Dezimalpunkt unterschieden werden. Damit haben Sie die folgenden Möglichkeiten, wenn Sie String() auf das Zahlenliteral 123 aufrufen wollen:
123..toString()
123 .toString() // space before the dot 123.0.toString()
(123).toString()
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.