Encontré tres formas de convertir una variable Stringen JavaScript.
Busqué esas tres opciones en el código fuente de jQuery, y todas están en uso .
Me gustaría saber si hay alguna diferencia entre ellos:
value.toString()
String(value)
value + ""
Todos producen la misma salida, pero ¿uno de ellos es mejor que los demás?
Diría que + ""tiene la ventaja de que salva a algunos personajes, pero esa no es una gran ventaja, ¿algo más?
javascript
jquery
string
gdoron está apoyando a Monica
fuente
fuente

toString()sería el camino a seguir.toStringes semánticamente la forma más clara de auto documentar el hecho de que está tratando de obtener una cadena equivalente a un objeto.String(...)es un poco obtuso, yvalue + ""es un poco hack. También le da la posibilidad de anular el valor predeterminadotoStringcon una implementación personalizada si alguna vez lo necesita, supongo, como un beneficio secundario menor.+ ""es el más rápido según el jsperf, así que ... lo hace de otra manera, supongo.Respuestas:
Se comportan de manera diferente cuando
valuees asínull.null.toString()arroja un error - No se puede llamar al método 'toString' de nuloString(null)devuelve - "nulo"null + ""también devuelve - "nulo"Un comportamiento muy similar ocurre si
valuees asíundefined(ver la respuesta de jbabey ).Aparte de eso, hay una diferencia de rendimiento insignificante que, a menos que los esté utilizando en bucles enormes, no vale la pena preocuparse.
fuente
toString()cuando aún no lo haya verificadonull.nulloundefineden la pantalla es un comportamiento más deseable que un error de JavaScript ...v + ''devuelve un resultado incorrecto si v tiene los métodos toString () y valueOf (). La concatenación ignorará toString () y usará valueOf (). Ejemplo de una clase para la cual falla la concatenación: github.com/processing-js/processing-js/blob/…Hay diferencias, pero probablemente no sean relevantes para su pregunta. Por ejemplo, el prototipo toString no existe en variables indefinidas, pero puede convertir indefinido a una cadena utilizando los otros dos métodos:
http://jsfiddle.net/f8YwA/
fuente
String(). Ejemplo:String(test);tirosUncaught ReferenceError: test is not defined, mientrasvar test; String(test);que resultará en"undefined".Se comportan igual pero
toStringtambién proporcionan una forma de convertir un número de cadenas binarias, octales o hexadecimales:Ejemplo:
fuente
Según esta prueba de JSPerf , difieren en velocidad. Pero a menos que los vaya a usar en grandes cantidades, cualquiera de ellos debería funcionar bien.
Para completar: como ya se mencionó como un abogado , también puede usar el
.toString()método.fuente
new String()devuelve un objeto que no es unStringnew String()devuelve un objeto yes.String(), sin embargo, devuelve una cadena, que es la de la pregunta.new String(blarg)le ofrece unStringobjeto al que puede llamartoString(). En mi depurador de Chrome, resultan efectivamente el mismo tipo de objeto, excepto dicha diferencia.Además de todo lo anterior, se debe tener en cuenta que, para un valor definido
v:String(v)llamadasv.toString()'' + vllamadasv.valueOf()antes de cualquier otro tipo de repartoEntonces podríamos hacer algo como:
Probado en FF 34.0 y Nodo 0.10
fuente
si está de acuerdo con nulo, indefinido, NaN, 0 y falso todo el envío a '', entonces
(s ? s+'' : '')es más rápido.ver http://jsperf.com/cast-to-string/8
nota: existen diferencias significativas entre los navegadores en este momento.
fuente
Ejemplo del mundo real: Tengo una función de registro que se puede llamar con un número arbitrario de parámetros:
log("foo is {} and bar is {}", param1, param2). SiDEBUGse establece un indicador entrue, los corchetes se reemplazan por los parámetros dados y se pasa la cadena aconsole.log(msg). Los parámetros pueden y serán cadenas, números y lo que sea que las llamadas JSON / AJAX puedan devolver, tal vez inclusonull.arguments[i].toString()no es una opción, debido a los posiblesnullvalores (vea la respuesta de Connell Watkins)arguments[i] + "". Esto puede o no influir en una decisión sobre qué usar. Algunas personas se adhieren estrictamente a JSLint.fuente
En esta página puede probar el rendimiento de cada método usted mismo :)
http://jsperf.com/cast-to-string/2
aquí, en todas las máquinas y navegadores, ' "" + str ' es el más rápido, (String) str es el más lento
fuente