Encontré tres formas de convertir una variable String
en 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.toString
es 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 predeterminadotoString
con 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
value
es 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
value
es 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
.null
oundefined
en 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
toString
tambié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 unString
new String()
devuelve un objeto yes.String()
, sin embargo, devuelve una cadena, que es la de la pregunta.new String(blarg)
le ofrece unString
objeto 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()
'' + v
llamadasv.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)
. SiDEBUG
se 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 posiblesnull
valores (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