Caracteres de escape en comillas simples y dobles de JavaScript [duplicado]

Tengo una pregunta acerca de los caracteres de escape en JavaScript con la que espero que pueda ayudarme. Decir si tengo el siguiente código JavaScript:

document.write("<img src=\"http://www.google.com\" />");

Ahora, en el ejemplo anterior, puede ver que he comenzado el document.write con comillas dobles " y por eso necesito escapar de las comillas dentro delimg src="" /> para asegurarse de que JavaScript todavía piense que es una cadena.

Pero en el siguiente ejemplo, puede ver que he usado una comilla simple ' para comenzar el document.write declaración. Mi pregunta es, ¿debo seguir escapando de las comillas dobles? Sé que la declaración funcionará sin esto, pero ¿cuál es la mejor práctica?

document.write('<img src=\"http://www.google.com\" />');  

La razón por la que pregunto es que tengo una declaración condicional que he escrito que dispara una imagen (según la línea anterior) pero no parece estar funcionando y descarto todas las posibilidades de lo que puede estar causando esto. Me encuentro con cosas como esta casi todos los días, así que cualquier ayuda sería muy apreciada. Esta puede ser una pregunta tonta, así que disculpas de antemano...

preguntado el 22 de mayo de 12 a las 10:05

Voto que esta pregunta no se marque como un engaño porque la que se refiere como primaria no pide NI cubre la discusión sobre "mejores prácticas", mientras que en (esta) publicación el tema de las mejores prácticas se cubre de manera adecuada detalles. -

5 Respuestas

Cuando use comillas simples, solo necesita escapar de las comillas simples, no de las comillas dobles.

(EDIT: ¡Y viceversa!)

contestado el 22 de mayo de 12 a las 10:05

Gracias. ¿Hay algo de malo en escapar de las comillas dobles en el segundo ejemplo? ¿Qué pasaría si lo hiciera de todos modos? - zik

No tiene nada de malo (¡excepto que google.com no devuelve una imagen!) - Tim

Jaja, sí, posiblemente sea un mal ejemplo, pero ya ves a lo que me dirigía. Gracias por la respuesta. - zik

document.write('<img src="http://www.google.com" onClick="foo(\'bar\');" />'); 

Solo necesita escapar del mismo tipo de comillas que está utilizando.

contestado el 22 de mayo de 12 a las 11:05

hola que tal si tengo var data= "bar" ; y quiero usar esta variable en lugar de \'bar\' ? Entendí lo que estás tratando de decir aquí... pero mi condición es tal que tengo que usar variable en lugar de `\bar` - HIRA THAKUR

@Digital_at_heart: no importa cómo se definan las comillas. '<img src="blah.gif" oncClick="foo('\' + data + ''\);" />'; - OptimusCrimen

A estas alturas, ya tiene la imagen: no es necesario escapar de las comillas que no está utilizando como delimitadores de esa cadena en particular. Sin embargo: lo que es la mejor práctica es una historia diferente. Sé de algunas personas que te dirán que 'siempre escapar de las comillas' es un buen hábito. Estoy en desacuerdo. A diferencia de otros lenguajes, JavaScript es razonablemente indulgente cuando se trata de caracteres escapados: en su segundo ejemplo, las barras invertidas no se imprimirán.

Este no es siempre el caso, por lo que mi sugerencia sería: sea coherente con las comillas que usa (simple || doble) y escape solo las que necesitan escapar. Dependiendo de qué otros idiomas esté usando, es posible que desee pensar un poco en qué comillas va a usar. Si está utilizando PHP, por ejemplo, use comillas simples, ya que las comillas dobles hacen más que solo delimitar una cadena. Si está acostumbrado a escribir lenguajes similares a C (o Java), es mejor que mantenga el hábito de usar comillas dobles, ya que hay una diferencia aún mayor entre comillas simples y dobles en esos lenguajes.

contestado el 22 de mayo de 12 a las 11:05

Gracias por esto. Tiendo a usar comillas dobles en JavaScript como una cuestión de consistencia, ¡pero supongo que las comillas simples para un lenguaje como JavaScript son más fáciles de seguir! - zik

En general, sí, especialmente si está creando nuevos elementos como una cadena, podría quedarse fácilmente con comillas dobles y usar var newImg = document.createElement("img"); y asigne sus atributos así: newImg.src = "http://www.google.com"; evitando así claramente los delimitadores de cadena de escape o la mezcla de tipos de comillas. - Elias Van Ootegem

document.write('<img src="http://www.google.com" />'); Funcionará bien.

lo mismo cuenta para document.write("<img src='http://www.google.com' />");

contestado el 22 de mayo de 12 a las 11:05

<html>
<body>

<script type="text/javascript">

document.write(escape("<img src=\"http://www.google.com\" />"));

</script>

</body>
</html>

contestado el 22 de mayo de 12 a las 11:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.