Tengo el siguiente código en Ruby. Quiero convertir este código en JavaScript. ¿Cuál es el código equivalente en JS?
text = <<"HERE"
This
Is
A
Multiline
String
HERE
javascript
string
multiline
heredoc
Nuevo y
fuente
fuente
Respuestas:
Actualizar:
ECMAScript 6 (ES6) introduce un nuevo tipo de literal, a saber, los literales de plantilla . Tienen muchas características, interpolación variable entre otras, pero lo más importante para esta pregunta, pueden ser multilíneas.
Una plantilla literal está delimitada por comillas invertidas :
(Nota: no estoy abogando por usar HTML en cadenas)
El soporte del navegador está bien , pero puede usar transpilers para ser más compatible.
Respuesta original de ES5:
Javascript no tiene una sintaxis de documento aquí. Sin embargo, puede escapar de la nueva línea literal, que se acerca:
fuente
Actualización de ES6:
Como se menciona en la primera respuesta, con ES6 / Babel, ahora puede crear cadenas de varias líneas simplemente usando las teclas de retroceso:
La interpolación de variables es una nueva característica popular que viene con cadenas delimitadas por retroceso:
Esto solo se transmite a la concatenación:
Respuesta original de ES5:
fuente
\
lugar de `\` es difícil de notar] y (3) mientras que la mayoría de los motores de script admiten esto, no es parte de ECMAScript [es decir, por qué ¿usa características no estándar?] Recuerde que es una guía de estilo, que trata de hacer que el código sea fácil de leer + mantener + depurar: no solo "funciona" correctamente.el patrón
text = <<"HERE" This Is A Multiline String HERE
no está disponible en js (recuerdo haberlo usado mucho en mis viejos días de Perl).Para mantener la supervisión con cadenas multilíneas complejas o largas, a veces uso un patrón de matriz:
o el patrón anónimo ya mostrado (escape de nueva línea), que puede ser un bloqueo feo en su código:
Aquí hay otro 'truco' extraño pero que funciona 1 :
edición externa: jsfiddle
ES20xx admite cadenas de expansión sobre varias líneas utilizando cadenas de plantilla :
1 Nota: esto se perderá después de minimizar / ofuscar su código
fuente
Usted puede tener líneas múltiples en JavaScript puro.
Este método se basa en la serialización de funciones, que se define como dependiente de la implementación . Funciona en la mayoría de los navegadores (ver más abajo), pero no hay garantía de que seguirá funcionando en el futuro, así que no confíes en él.
Usando la siguiente función:
Puede tener aquí documentos como este:
El método se ha probado con éxito en los siguientes navegadores (no mencionado = no probado):
Sin embargo, ten cuidado con tu minificador. Tiende a eliminar comentarios. Para el compresor YUI , se conservará un comentario que comience con
/*!
(como el que usé).Creo que una solución real sería usar CoffeeScript .
ACTUALIZACIÓN DE ES6: puede usar la tecla de retroceso en lugar de crear una función con un comentario y ejecutar toString en el comentario. La expresión regular necesitaría actualizarse solo para eliminar espacios. También podría tener un método de prototipo de cadena para hacer esto:
Eso sería genial. Alguien debería escribir este método de cadena .removeIndentation ...;)
fuente
Puedes hacerlo...
fuente
Se me ocurrió este método muy manipulado de una cuerda con múltiples líneas. Dado que convertir una función en una cadena también devuelve cualquier comentario dentro de la función, puede usar los comentarios como su cadena usando un comentario multilínea / ** /. Solo tienes que recortar los extremos y tienes tu cuerda.
fuente
toString()
.)Me sorprende que no haya visto esto, porque funciona en todas partes donde lo he probado y es muy útil, por ejemplo, para plantillas:
¿Alguien sabe de un entorno donde hay HTML pero no funciona?
fuente
Resolví esto enviando un div, ocultándolo y llamando al id de div por jQuery cuando lo necesitaba.
p.ej
Luego, cuando necesito obtener la cadena, solo uso el siguiente jQuery:
Lo que devuelve mi texto en varias líneas. Si llamo
Yo obtengo:
fuente
display:none
contenido, probablemente debido a la popularidad de los front-end con estilo JavaScript. (Por ejemplo, una página de preguntas frecuentes con funcionalidad de ocultar / mostrar). Sin embargo, debe tener cuidado, porque Google dice que pueden castigarlo si el contenido oculto parece estar diseñado para inflar artificialmente su clasificación SEO.Hay varias formas de lograr esto
1. Concatenación de barra
2. concatenación regular
3. Array Unir concatenación
Rendimiento sabio, concatenación Slash (primera) es la más rápida.
Consulte este caso de prueba para obtener más detalles sobre el rendimiento
Actualizar:
Con el ES2015 , podemos aprovechar su función de cadenas de plantillas. Con él, solo necesitamos usar ticks de retroceso para crear cadenas de líneas múltiples
Ejemplo:
fuente
Usando etiquetas de script:
<script>...</script>
bloque que contenga su texto multilínea en lahead
etiqueta;obtenga su texto multilínea como está ... (cuidado con la codificación de texto: UTF-8, ASCII)
fuente
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
. No recuerdo haber tenido otros problemas además de escribir mal los comentarios en JS. Espacios donde no hay problemas.Me gusta esta sintaxis e indendación:
(pero en realidad no se puede considerar como una cadena multilínea)
fuente
Hay esta biblioteca que lo hace hermoso:
https://github.com/sindresorhus/multiline
antes de
Después
fuente
nodejs
uso en el navegador debe ser provechoso.Function.prototype.String()
.Votantes : este código se proporciona solo con fines informativos.
Esto ha sido probado en Fx 19 y Chrome 24 en Mac
MANIFESTACIÓN
fuente
para resumir, he intentado 2 enfoques enumerados aquí en la programación javascript del usuario (Opera 11.01):
Por lo tanto, recomiendo el enfoque de trabajo para los usuarios de Opera JS. A diferencia de lo que decía el autor:
Funciona en Opera 11. Al menos en las secuencias de comandos JS del usuario. Lástima que no puedo comentar respuestas individuales o votar la respuesta, lo haría de inmediato. Si es posible, alguien con mayores privilegios, háganlo por mí.
fuente
Mi extensión a https://stackoverflow.com/a/15558082/80404 . Espera comentar en una forma
/*! any multiline comment */
donde símbolo! se usa para evitar la extracción por minificación (al menos para el compresor YUI)Ejemplo:
fuente
Actualizado para 2015 : ahora es seis años después: la mayoría de las personas usa un cargador de módulos, y los sistemas de módulos principales tienen formas de cargar plantillas. No está en línea, pero el tipo más común de cadena multilínea son las plantillas, y las plantillas generalmente deben mantenerse fuera de JS de todos modos .
require.js: 'requiere texto'.
Uso del complemento require.js 'text' , con una plantilla multilínea en template.html
NPM / browserify: el módulo 'brfs'
Browserify utiliza un módulo 'brfs' para cargar archivos de texto. Esto realmente construirá su plantilla en su HTML incluido.
Fácil.
fuente
Si está dispuesto a usar las nuevas líneas escapadas, se pueden usar muy bien . Parece un documento con un borde de página .
fuente
El equivalente en javascript es:
Aquí está la especificación . Consulte el soporte del navegador al final de esta página . Aquí hay algunos ejemplos también.
fuente
Esto funciona en IE, Safari, Chrome y Firefox:
fuente
Puede usar TypeScript (JavaScript SuperSet), admite cadenas multilínea y transpila de nuevo a JavaScript puro sin sobrecarga:
Si desea lograr lo mismo con JavaScript simple:
Tenga en cuenta que el iPad / Safari no es compatible
'functionName.toString()'
Si tiene mucho código heredado, también puede usar la variante simple de JavaScript en TypeScript (para fines de limpieza):
y puede usar el objeto de cadena multilínea de la variante de JavaScript simple, donde coloca las plantillas en otro archivo (que puede combinar en el paquete).
Puede probar TypeScript en
http://www.typescriptlang.org/Playground
fuente
La forma ES6 de hacerlo sería mediante el uso de plantillas literales:
Más referencia aquí
fuente
ES6 le permite utilizar una tecla de retroceso para especificar una cadena en varias líneas. Se llama una plantilla literal. Me gusta esto:
El uso del backtick funciona en NodeJS, y es compatible con Chrome, Firefox, Edge, Safari y Opera.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals
fuente
La forma más fácil de crear cadenas multilínea en Javascrips es mediante el uso de backticks (``). Esto le permite crear cadenas multilínea en las que puede insertar variables con
${variableName}
.Ejemplo:
compatibilidad:
ES6
//es2015
Verifique la compatibilidad exacta en documentos de Mozilla aquí
fuente
Mi versión de combinación basada en matriz para string concat:
Esto me ha funcionado bien, especialmente porque a menudo inserto valores en el html construido de esta manera. Pero tiene muchas limitaciones. Sangría sería bueno. No tener que lidiar con comillas anidadas sería realmente agradable, y solo su volumen me molesta.
¿El .push () para agregar a la matriz toma mucho tiempo? Ver esta respuesta relacionada:
( ¿Hay alguna razón por la que los desarrolladores de JavaScript no usen Array.push ()? )
Después de ver estas ejecuciones de prueba (opuestas), parece que .push () está bien para las matrices de cadenas que probablemente no crecerán más de 100 elementos; lo evitaré a favor de las adiciones indexadas para matrices más grandes.
fuente
Puede usar
+=
para concatenar su cadena, parece que nadie respondió eso, lo que será legible y también ordenado ... algo como estotambién se puede escribir como
fuente
También tenga en cuenta que, al extender la cadena sobre varias líneas usando la barra diagonal inversa al final de cada línea, cualquier carácter adicional (principalmente espacios, pestañas y comentarios agregados por error) después de la barra diagonal inversa causará un error inesperado de caracteres, que tardé una hora en encontrar fuera
fuente
Por amor a Internet, use la concatenación de cadenas y opte por no usar soluciones ES6 para esto. ES6 NO es compatible en todos los ámbitos, al igual que CSS3 y algunos navegadores tardan en adaptarse al movimiento CSS3. Utilice JavaScript simple, sus usuarios finales se lo agradecerán.
Ejemplo:
var str = "This world is neither flat nor round. "+ "Once was lost will be found";
fuente
Debe usar el operador de concatenación '+'.
Al usar
\n
su código fuente se verá así:Al usar
<br>
la salida de su navegador se verá así:fuente
Creo que esta solución debería funcionar en IE, Chrome, Firefox, Safari, Opera -
Usando jQuery :
Usando Javascript puro:
¡¡Salud!!
fuente
<xmp>
es tan obsoleto Puede estar permitido en HTML, pero no debe ser utilizado por ningún autor. Ver stackoverflow.com/questions/8307846/…<pre>;
escapes no ayudará en mi solución ... Me encontré con un problema similar hoy y tratando de encontrar una solución alternativa ... pero en mi caso, encontré una manera muy fácil de solucionar este problema poniendo la salida en comentarios html en lugar de <xmp> o cualquier otra etiqueta. jajaja Sé que no es una forma estándar de hacer esto, pero trabajaré en este tema más mañana por la mañana. ¡Saludos!style="display:none"
Chrome intenta cargar las<img>
imágenes mencionadas en el bloque de ejemplo.Acabo de probar la respuesta anónima y descubrí que hay un pequeño truco aquí, no funciona si hay un espacio después de la barra invertida.
\
Entonces, la siguiente solución no funciona:
Pero cuando se elimina el espacio, funciona:
Espero eso ayude !!
fuente