Ich habe drei Möglichkeiten gefunden, eine Variable String
in JavaScript umzuwandeln.
Ich habe im jQuery-Quellcode nach diesen drei Optionen gesucht, und sie werden alle verwendet .
Ich würde gerne wissen, ob es Unterschiede zwischen ihnen gibt:
value.toString()
String(value)
value + ""
Sie alle produzieren die gleiche Leistung, aber ist einer von ihnen besser als die anderen?
Ich würde sagen, das + ""
hat den Vorteil, dass es einige Charaktere speichert, aber das ist nicht der große Vorteil, sonst noch etwas?
javascript
jquery
string
Gdoron unterstützt Monica
quelle
quelle
toString()
der richtige Weg.toString
ist dies semantisch der klarste Weg, um die Tatsache selbst zu dokumentieren, dass Sie versuchen, eine Zeichenfolge zu erhalten, die einem Objekt entspricht.String(...)
ist ein wenig stumpf undvalue + ""
ist ein bisschen ein Hack. Es gibt Ihnen auch die Möglichkeit, die StandardeinstellungtoString
mit einer benutzerdefinierten Implementierung zu überschreiben , falls Sie dies jemals als geringfügigen Nebeneffekt benötigen.+ ""
laut jsperf ist es das schnellste, also ... es macht es auf keine andere Weise, denke ich.Antworten:
Sie verhalten sich anders, wenn das
value
istnull
.null.toString()
löst einen Fehler aus - Die Methode 'toString' von null kann nicht aufgerufen werdenString(null)
gibt zurück - "null"null + ""
gibt auch zurück - "null"Sehr ähnliches Verhalten tritt auf, wenn dies der Fall
value
istundefined
(siehe die Antwort von jbabey ).Abgesehen davon gibt es einen vernachlässigbaren Leistungsunterschied, über den Sie sich keine Sorgen machen sollten, es sei denn, Sie verwenden sie in großen Schleifen.
quelle
toString()
wenn Sie es noch nicht überprüftnull
haben.null
oderundefined
das Anzeigen auf dem Bildschirm wünschenswerter ist als ein Javascript-Fehler ...v + ''
Gibt ein falsches Ergebnis zurück, wenn v sowohl die Methoden toString () als auch valueOf () hat. Die Verkettung ignoriert toString () und verwendet valueOf (). Beispiel einer Klasse, für die die Verkettung fehlschlägt: github.com/processing-js/processing-js/blob/…Es gibt Unterschiede, aber sie sind wahrscheinlich für Ihre Frage nicht relevant. Beispielsweise ist der toString-Prototyp für undefinierte Variablen nicht vorhanden, aber Sie können undefiniert mit den beiden anderen Methoden in eine Zeichenfolge umwandeln:
http://jsfiddle.net/f8YwA/
quelle
String()
. Beispiel:String(test);
wirftUncaught ReferenceError: test is not defined
, währendvar test; String(test);
ergibt"undefined"
.Sie verhalten sich gleich,
toString
bieten aber auch die Möglichkeit, eine binäre, oktale oder hexadezimale Zahl zu konvertieren:Beispiel:
quelle
Nach diesem JSPerf-Test unterscheiden sie sich in der Geschwindigkeit. Aber wenn Sie sie nicht in großen Mengen verwenden, sollte jeder von ihnen eine gute Leistung bringen.
Der Vollständigkeit halber : Wie bereits erwähnt, können Sie die
.toString()
Methode auch anwenden .quelle
new String()
gibt ein Objekt zurück, das nicht aString
new String()
gibt ein Objekt yes zurück.String()
Gibt jedoch eine Zeichenfolge zurück, die in der Frage angegeben ist.new String(blarg)
Sie einString
Objekt, das Sie aufrufen könnentoString()
. In meinem Chrome-Debugger führen sie mit Ausnahme des Unterschieds effektiv zu derselben Art von Objekt.Zusätzlich zu all dem sollte man beachten, dass für einen definierten Wert
v
:String(v)
Anrufev.toString()
'' + v
Anrufev.valueOf()
vor jeder anderen BesetzungAlso könnten wir so etwas machen wie:
Getestet in FF 34.0 und Node 0.10
quelle
Wenn Sie mit null, undefined, NaN, 0 und false einverstanden sind, ist das Casting auf ''
(s ? s+'' : '')
schneller.Siehe http://jsperf.com/cast-to-string/8
Hinweis - Derzeit gibt es erhebliche Unterschiede zwischen den Browsern.
quelle
Beispiel aus der Praxis: Ich habe eine Protokollfunktion, die mit einer beliebigen Anzahl von Parametern aufgerufen werden kann :
log("foo is {} and bar is {}", param1, param2)
. Wenn einDEBUG
Flag auf gesetzt isttrue
, werden die Klammern durch die angegebenen Parameter ersetzt und die Zeichenfolge an übergebenconsole.log(msg)
. Parameter können und werden Strings, Numbers und alles sein, was von JSON / AJAX-Aufrufen zurückgegeben werden kann, vielleicht sogarnull
.arguments[i].toString()
ist aufgrund möglichernull
Werte keine Option (siehe Antwort von Connell Watkins)arguments[i] + ""
. Dies kann eine Entscheidung über die Verwendung beeinflussen oder nicht. Einige Leute halten sich strikt an JSLint.quelle
Auf dieser Seite können Sie die Leistung jeder Methode selbst testen :)
http://jsperf.com/cast-to-string/2
Hier ist auf allen Computern und Browsern ' "" + str ' der schnellste, (String) str der langsamste
quelle