Am găsit trei moduri de a arunca o variabilă a String
în JavaScript.
Am căutat cei trei opțiuni în jQuery codul sursă, și toate sunt în utilizare.
Aș dori să știu dacă există diferențe între ele:
value.toString()
String(value)
value + ""
[DEMO][1]
Toate produc același rezultat, dar nu unul dintre ei mai bine decât alții?
Aș spune că + ""
are un avantaj pe care-l salvează unele personaje, dar care's nu-i mare avantaj, altceva?
Ei nu se comportă diferit atunci când valoarea este null
.
nul.toString()
aruncă o eroare - nu se Poate apela metoda 'toString' de nulString(null)
întoarce - "nul"Foarte comportament similar se întâmplă dacă "valoare" este "nedefinit" (a se vedea jbabey's a răspunde).
Altele decât că, există un număr neglijabil de diferenta de performanta, care, dacă nu're a le utiliza în bucle mari, e't în valoare de griji.
Există diferențe, dar ele sunt, probabil, nu sunt relevante pentru întrebarea ta. De exemplu, toString prototip nu există pe nedefinit de variabile, dar puteți arunca nedefinit la un șir de caractere folosind alte două metode:
var foo;
var myString1 = String(foo); // "undefined" as a string
var myString2 = foo + ''; // "undefined" as a string
var myString3 = foo.toString(); // throws an exception
Ei se comportă la fel, dar `toString, de asemenea, oferă o modalitate de a converti un număr binar, octal, hexazecimal sau siruri de caractere:
Exemplu:
var a = (50274).toString(16) // "c462"
var b = (76).toString(8) // "114"
var c = (7623).toString(36) // "5vr"
var d = (100).toString(2) // "1100100"
În conformitate cu acest JSPerf test, acestea diferă în viteza. Dar dacă nu're de gând să le folosească în cantități uriașe, oricare dintre ele ar trebui să efectueze bine.
Pentru completitudine: Ca asawyer cum sa menționat deja, puteți utiliza, de asemenea `.toString () metoda.
În plus față de toate cele de mai sus, unul ar trebui să rețineți că, pentru o valoare definită de "v":
String(v) "cereri" v. toString()
'' + v "cereri" v. valueOf ()
, înainte de orice alt tip castDeci, am putea face ceva de genul:
var mixin = {
valueOf: function () { return false },
toString: function () { return 'true' }
};
mixin === false; // false
mixin == false; // true
'' + mixin; // "false"
String(mixin) // "true"
Tested în FF 34.0 și Nod 0.10
dacă sunteți ok cu null, nedefinit, NaN, 0, false și toate turnare la '' apoi (i ? s+'' : '')
este mai rapid.
vezi http://jsperf.com/cast-to-string/8
notă - există diferențe semnificative în browsere, în acest moment.
Exemplu Real: am'am luat-o funcție de jurnal care poate fi numit cu un număr arbitrar de parametri: log("foo este {} și bar este {}", param1, param2)
. Dacă o DEBUG
flag este setat la "true", paranteze înlocuite de parametrii de date și șirul este trecut la consola.log(msg)
. Parametrii pot și vor fi Siruri de caractere, Numere și orice s-ar fi întors de JSON / apeluri AJAX, poate chiar null
.
nu este o opțiune, din cauza unor posibile
null` valori (a se vedea Connell Watkins răspuns)