¿Cómo divido una cadena en más de una línea de código en JavaScript?

198

¿Hay un carácter en JavaScript para dividir una línea de código para que se lea como continuo a pesar de estar en una nueva línea?

Algo como....

1. alerta ("Seleccione el archivo   
2. \ para eliminar ");
TTT
fuente

Respuestas:

272

En su ejemplo, puede romper la cadena en dos partes:

alert ( "Please Select file"
 + " to delete");

O, cuando se trata de una cadena, como en su caso, puede usar una barra diagonal inversa como sugirió @Gumbo:

alert ( "Please Select file\
 to delete");

Tenga en cuenta que este enfoque de barra diagonal inversa no es necesariamente preferido , y posiblemente no sea universalmente compatible (tuve problemas para encontrar datos concretos sobre esto). Es no en la especificación ECMA 5.1 .

Cuando se trabaja con otro código (no entre comillas), los saltos de línea se ignoran y son perfectamente aceptables. Por ejemplo:

if(SuperLongConditionWhyIsThisSoLong
  && SuperLongConditionOnAnotherLine
  && SuperLongConditionOnThirdLineSheesh)
{
    // launch_missiles();
}
Michael Haren
fuente
¿Puedes romper una declaración if?
TTT
17
Pero tenga cuidado con el mecanismo de inserción automática de punto y coma: intente obtener un retorno en una fila y una "cadena" en la siguiente al final de la función y, como resultado, quedará indefinido.
Algunos de
¿Es esto compatible con los estándares? ¿Todos los navegadores compatibles lo admitirán? ¿Los navegadores más antiguos lo admiten hoy? Ninguna de estas preguntas importantes cubiertas, -1.
ulidtko
3
Bueno ... si vas a hacer un montón de preguntas nuevas que aún no se han hecho, tienes que darnos la oportunidad de responderlas. Actualicé mi respuesta con una conjetura insatisfactoria.
Michael Haren
2
Cuidado con la barra invertida. Se comerá todos los espacios en blanco hasta que encuentre un espacio en blanco. Entonces el ejemplo "alertará": Seleccione el archivo para eliminar. Si desea el espacio en blanco entre el archivo y el, debe colocarlo antes de la barra diagonal inversa.
jgomo3
41

Ponga la barra invertida al final de la línea:

alert("Please Select file\
 to delete");

Editar     Tengo que tener en cuenta que esto no es parte de las cadenas de ECMAScript ya que los caracteres de terminación de línea no están permitidos en absoluto:

Un carácter ' LineTerminator ' no puede aparecer en una cadena literal, incluso si está precedido por una barra invertida \. La forma correcta de hacer que un carácter terminador de línea forme parte del valor de cadena de un literal de cadena es usar una secuencia de escape como \no \u000A.

Por lo tanto, usar la concatenación de cadenas es la mejor opción.


Actualizar 2015-01-05     Los literales de cadena en ECMAScript5 permiten la sintaxis mencionada:

Un carácter terminador de línea no puede aparecer en un literal de cadena, excepto como parte de una Continuación de línea para producir la secuencia de caracteres vacía. La forma correcta de hacer que un carácter terminador de línea forme parte del valor de cadena de un literal de cadena es usar una secuencia de escape como \no \u000A.

Gumbo
fuente
1
ECMAScript5 lo permite: " Un carácter terminador de línea no puede aparecer en un literal de cadena, excepto como parte de una Continuación de\n\u000A línea para producir la secuencia de caracteres vacía. La forma correcta de hacer que un carácter terminador de línea forme parte del valor de cadena de un literal de cadena es usar una secuencia de escape como o " .
Oriol
1
@ Oriol ¡Gracias por la nota, actualicé la respuesta en consecuencia!
Gumbo
1
¿Es problemático si el archivo se creó en Windows? En otras palabras, líneas terminadas con en \r\nlugar de \n?
Adam Plocher
31

ECMAScript 6 presenta cadenas de plantillas :

Las cadenas de plantilla son literales de cadena que permiten expresiones incrustadas. Puede utilizar cadenas de varias líneas y funciones de interpolación de cadenas con ellas.

Por ejemplo,

alert(`Please Select file   
to delete`);

alertará

Please Select file   
to delete
Oriol
fuente
1
Wow increible. Para obtener estos `` en el teclado, presione MAYÚS + ´ dos veces. En un teclado alemán, esa tecla está cerca de la tecla de retroceso.
Nadu
@ Nadu Eso depende de un teclado. La mía tiene una `llave. Como es un modificador, no está escrito directamente. Probablemente por eso pensó que debería presionarlo dos veces, pero eso escribirá dos de ellos. Presione la barra espaciadora para escribir solo uno.
Oriol
Increíble que tomó tanto tiempo permitir cadenas multilínea sin hacks sofisticados ... La pregunta es: ¿Qué se usará como separador de línea, un carácter (s) codificado o el carácter (s) de salto de línea del documento?
StanE
1
Hay un problema con `` en caso de que desee ampliar el archivo * .js.
Raskolnikov
1
Tenga en cuenta que, en marzo de 2018, solo el 89% de los navegadores mundiales utilizados admiten cadenas de plantillas de acuerdo con caniuse.com caniuse.com/#feat=template-literals
FFirmenich
7

Romper la cuerda en dos pedazos 

alert ("Please select file " +
       "to delete");
Jason Punyon
fuente
9
Pero no olvides tener un espacio al final de la primera o al comienzo de la segunda parte;)
Majid Fouladpour
4

Interesante tener en cuenta. Intentó:

alert("Some \
    string \
    wrapped \
    across \
    mutliples lines.")

Y esto funcionó. Sin embargo, ¡en un accidente !, había un carácter de espacio después de la barra diagonal inversa final (todas las demás barras diagonales inversas estaban al final de la línea). ¡Y esto causó un error en el javascript! Sin embargo, eliminar este espacio solucionó el error.

Esto está en ADT para Android con Cordova.

Ahí
fuente
1
Pasé la mayor parte del día luchando contra este problema y también descubrí, gracias a ti, que un personaje espacial después de cualquiera de las barras estaba causando que mi aplicación iónica no se compilara. ¡Gracias!
rekordboy
1
No puedo creer que nadie haya comentado que esto incluirá cualquier sangría que haya en el código como parte de la cadena, de modo que el ejemplo se conviertaSome\n<4 spaces>string\n<4 spaces>wrapped\n<4 spaces>across\n<4 spaces>multiple lines.
JHH
1

Puedes usar

1:  alert("Please select file" +
2:        " to delete");

Eso debería funcionar

Jaime Garcia
fuente
0

Puede dividir una cadena larga constante en fragmentos lógicos y asignarlos a una matriz. Luego haz un joincon una cadena vacía como delimitador.

var stringArray = [
  '1. This is first part....',
  '2. This is second part.....',
  '3. Finishing here.'
];

var bigLongString = stringArray.join('');
console.log(bigLongString);

La salida será:

  1. Esta es la primera parte ... 2. Esta es la segunda parte ..... 3. Terminando aquí.

De esta forma, se ve un ligero rendimiento, pero se obtiene legibilidad y facilidad de mantenimiento del código.

blackcatweb
fuente
0

Una buena solución aquí para los usuarios de VSCode , si una cadena que se divide en varias líneas causa el problema (me enfrenté a esto cuando tuve que probar un token JWT largo, y de alguna manera usar literales de plantilla no funcionó).

Sujit Y. Kulkarni
fuente
-3

Intenté varias de las sugerencias anteriores, pero recibí una advertencia de carácter ILEGAL en el inspector de código de Chrome. Lo siguiente funcionó para mí (¡solo probado en Chrome!)

alert('stuff on line 1\\nstuff on line 2);

sale como ...

stuff on line 1
stuff on line 2

¡¡¡NOTA la doble barra invertida !! ... esto parece ser importante!

onionjohnny
fuente
-5

No hay necesidad de ninguna interrupción manual en el código. Simplemente agregue \ n donde quiera romper.

alert ("Please Select file \n to delete");

Esto mostrará la alerta como

Please select file 
to delete.
Narendra
fuente
votante, ¿puede decirme el motivo del voto negativo? Esta solución siempre funciona para mí.
Narendra
27
No sé quién votó en contra o por qué; pero solo una suposición: el operador quería saber cómo extender un literal de texto a través de múltiples líneas de código, en lugar de cómo insertar un salto de línea en la salida.
Zarepheth