Como faço para quebrar uma string em mais de uma linha de código em JavaScript?

198

Existe um caractere no JavaScript para quebrar uma linha de código para que seja lida como contínua, apesar de estar em uma nova linha?

Algo como....

1. alerta ("Selecione o arquivo   
2. \ para excluir ");
TTT
fonte

Respostas:

272

No seu exemplo, você pode quebrar a cadeia em duas partes:

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

Ou, quando for uma string, como no seu caso, você pode usar uma barra invertida como o @Gumbo sugeriu:

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

Observe que essa abordagem de barra invertida não é necessariamente preferida e possivelmente não é universalmente suportada (tive problemas para encontrar dados concretos sobre isso). É não na ECMA 5.1 especificação .

Ao trabalhar com outro código (não entre aspas), as quebras de linha são ignoradas e perfeitamente aceitáveis. Por exemplo:

if(SuperLongConditionWhyIsThisSoLong
  && SuperLongConditionOnAnotherLine
  && SuperLongConditionOnThirdLineSheesh)
{
    // launch_missiles();
}
Michael Haren
fonte
Você pode quebrar uma declaração if?
TTT
17
Mas tenha cuidado com o mecanismo de inserção automática de ponto-e-vírgula: tente retornar em uma linha e uma "string" na próxima no final da função e, como resultado, você ficará indefinido.
alguns
Isso é compatível com os padrões? Todos os navegadores compatíveis são compatíveis? Os navegadores mais antigos oferecem suporte hoje? Nenhuma dessas questões importantes abordadas, -1.
ulidtko
3
Bem ... se você vai fazer um monte de perguntas novas ainda não feitas, precisa nos dar uma chance de respondê-las. Atualizei minha resposta com uma conjectura insatisfatória.
Michael Haren
2
Cuidado com a barra invertida. Ele comerá todos os espaços em branco até encontrar um espaço em branco. Portanto, o exemplo "alertará": Selecione o arquivo para excluir. Se você deseja o espaço em branco entre o arquivo e o arquivo, deve colocá-lo antes da barra invertida.
Jgomo3
41

Coloque a barra invertida no final da linha:

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

Editar     Eu tenho que observar que isso não faz parte das seqüências de caracteres ECMAScript, pois caracteres de terminação de linha não são permitidos:

Um caractere ' LineTerminator ' não pode aparecer em uma string literal, mesmo se precedido por uma barra invertida \. A maneira correta de fazer com que um caractere terminador de linha faça parte do valor da string literal é usar uma sequência de escape como \nou \u000A.

Portanto, usar a concatenação de strings é a melhor escolha.


A atualização 05-01-2015     As literais de sequência no ECMAScript5 permitem a sintaxe mencionada:

Um caractere terminador de linha não pode aparecer em uma cadeia de caracteres literal, exceto como parte de um LineContinuation para produzir a sequência de caracteres vazia. A maneira correta de fazer com que um caractere terminador de linha faça parte do valor String de um literal de string é usar uma sequência de escape como \nou \u000A.

quiabo
fonte
1
O ECMAScript5 permite: " Um caractere de terminador de linha não pode aparecer em um literal de cadeia, exceto como parte de um LineContinuation para produzir a sequência de caracteres vazia. A maneira correta de fazer com que um caractere de terminador de linha faça parte do valor de String de um literal de string é usar uma seqüência de escape como \nor \u000A. "
Oriol 5/16
1
@ Oriol Obrigado pela nota, atualizou a resposta de acordo!
Gumbo
1
Isso é problemático se o arquivo foi criado no Windows. Em outras palavras, as linhas terminadas com em \r\nvez de \n?
Adam Plocher
31

O ECMAScript 6 apresenta sequências de modelos :

As strings de modelo são literais de string que permitem expressões incorporadas. Você pode usar strings de várias linhas e recursos de interpolação de strings com eles.

Por exemplo,

alert(`Please Select file   
to delete`);

irá alertar

Please Select file   
to delete
Oriol
fonte
1
Wow fantástico. Para colocá-las `` no teclado, pressione SHIFT + ´ duas vezes. Em um teclado alemão, essa tecla está próxima da tecla backspace.
Nadu
@Adu Isso depende de um teclado. O meu tem uma `chave. Como é um modificador, não é escrito diretamente. Provavelmente foi por isso que você pensou que deveria pressionar duas vezes, mas isso escreverá dois deles. Pressione barra de espaço para escrever apenas um.
Oriol
Inacreditável que demorou tanto tempo para permitir seqüências de linhas múltiplas sem hacks sofisticados ... A pergunta é: O que será usado como separadores de linha - um caractere (s) codificado (s) ou o caractere de quebra de linha do documento?
StanE 18/05/19
1
Há um problema com `` no caso em que você deseja aumentar o arquivo * .js.
Raskolnikov
1
Considere, que ainda março 2018 apenas 89% dos navegadores usados globais apoiar cordas modelo de acordo com caniuse.com caniuse.com/#feat=template-literals
FFirmenich
7

Quebrar a corda em dois pedaços 

alert ("Please select file " +
       "to delete");
Jason Punyon
fonte
9
Mas não se esqueça de ter um espaço no final do primeiro ou no início do segundo pedaço;)
Majid Fouladpour
4

Interessante notar. Tentou:

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

E isso funcionou. No entanto, por acidente!, Havia um caractere de espaço após a barra invertida final (todas as outras barras invertidas estavam no final da linha). E isso causou um erro no javascript! A remoção desse espaço corrigiu o erro.

Isso está no ADT para Android usando o Cordova.


fonte
1
Passei a maior parte do dia lutando contra esse problema e também descobri, graças a você, que um caractere espacial após qualquer uma das barras estava fazendo com que meu aplicativo iônico não fosse compilado. Obrigado!
rekordboy
1
Não posso acreditar que alguém comentou que isso vai incluir tudo o recuo foi no código como parte da cadeia de caracteres, para que o exemplo se tornaSome\n<4 spaces>string\n<4 spaces>wrapped\n<4 spaces>across\n<4 spaces>multiple lines.
JHH
1

Você pode apenas usar

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

Isso deve funcionar

Jaime Garcia
fonte
0

Você pode quebrar uma constante de cadeia longa em pedaços lógicos e atribuí-los a uma matriz. Em seguida, faça um joincom uma string vazia como delimitador.

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

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

A saída será:

  1. Esta é a primeira parte .... 2. Esta é a segunda parte ..... 3. Terminando aqui.

Há um ligeiro desempenho atingido dessa maneira, mas você ganha em legibilidade e manutenção de código.

blackcatweb
fonte
0

Uma boa solução aqui para usuários do VSCode , se uma sequência dividida em várias linhas causar o problema (eu enfrentei isso quando tive que testar um token JWT longo e, de alguma forma, usar literais de modelo não funcionou.)

Sujit Y. Kulkarni
fonte
-3

Tentei várias sugestões acima, mas recebi um aviso de caractere ILEGAL no inspetor de código do Chrome. O seguinte funcionou para mim (embora só tenha sido testado no Chrome!)

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

sai como ...

stuff on line 1
stuff on line 2

OBSERVAÇÃO a barra invertida dupla !! ... isso parece ser importante!

onionjohnny
fonte
-5

Não há necessidade de quebra manual de código. Basta adicionar \ n onde deseja quebrar.

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

Isso mostrará o alerta como

Please select file 
to delete.
Narendra
fonte
para baixo eleitor, você pode dizer o motivo do voto negativo. Esta solução funciona para mim sempre.
precisa
27
Não sei quem votou mal ou por quê; mas apenas um palpite: o op queria saber como estender um literal de texto em várias linhas de código, em vez de como inserir uma quebra de linha na saída.
Zarepheth 27/08/13