Come faccio a spezzare una stringa su più di una riga di codice in JavaScript?


198

Esiste un carattere in JavaScript per spezzare una riga di codice in modo che venga letto come continuo nonostante si trovi su una nuova riga?

Qualcosa di simile a....

1. alert ("Seleziona il file   
2. \ to delete ");

Risposte:


272

Nel tuo esempio, puoi spezzare la stringa in due pezzi:

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

Oppure, quando è una stringa, come nel tuo caso, puoi usare una barra rovesciata come suggerito da @Gumbo:

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

Si noti che questo approccio a barra rovesciata non è necessariamente preferito , e forse non è universalmente supportato (ho avuto problemi a trovare dati concreti su questo). E ' non è nel ECMA 5.1 spec .

Quando si lavora con altro codice (non tra virgolette), le interruzioni di riga vengono ignorate e perfettamente accettabili. Per esempio:

if(SuperLongConditionWhyIsThisSoLong
  && SuperLongConditionOnAnotherLine
  && SuperLongConditionOnThirdLineSheesh)
{
    // launch_missiles();
}

Puoi rompere un'istruzione if?
TTT

17
Ma fai attenzione al meccanismo di inserimento automatico del punto e virgola: prova ad avere il ritorno su una riga e una "stringa" sulla successiva alla fine della funzione e, di conseguenza, non sarai definito.
un po '

Questo è conforme agli standard? Tutti i browser compatibili lo supporteranno? I browser più vecchi lo supportano oggi? Nessuna di queste importanti domande coperte, -1.
Ulidtko,

3
Bene ... se hai intenzione di porre un sacco di nuove domande non già poste, devi darci la possibilità di rispondere. Ho aggiornato la mia risposta con una congettura insoddisfacente.
Michael Haren,

2
Fai attenzione alla barra rovesciata. Mangia tutti i blanck fino a quando non trova un vuoto. Quindi l'esempio "avviserà": selezionare fileto delete. Se si desidera lo spazio bianco tra file e to, è necessario inserirlo prima di barra rovesciata.
jgomo3,

41

Metti la barra rovesciata alla fine della riga:

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

Modifica     Devo notare che questo non fa parte delle stringhe ECMAScript poiché i caratteri di fine riga non sono consentiti affatto:

Un carattere " LineTerminator " non può apparire in una stringa letterale, anche se preceduto da una barra rovesciata \. Il modo corretto per far sì che un carattere di terminatore di riga faccia parte del valore di stringa di un valore letterale di stringa consiste nell'utilizzare una sequenza di escape come \no \u000A.

Quindi usare la concatenazione di stringhe è la scelta migliore.


Aggiornamento 2015-01-05 I     letterali di stringa in ECMAScript5 consentono la sintassi menzionata:

Un carattere di terminazione di riga non può apparire in un valore letterale di stringa, tranne come parte di una continuazione di riga per produrre una sequenza di caratteri vuota. Il modo corretto per far sì che un carattere di terminatore di riga faccia parte del valore String di un valore letterale di stringa consiste nell'utilizzare una sequenza di escape come \no \u000A.


1
ECMAScript5 lo consente: " Un carattere di terminazione di riga non può apparire in un valore letterale di stringa, se non come parte di una continuazione di\n\u000A riga per produrre una sequenza di caratteri vuota. Il modo corretto per far sì che un carattere di terminatore di riga faccia parte del valore String di un valore letterale di stringa è per usare una sequenza di escape come o . "
Oriol

1
@Oriol Grazie per la nota, aggiornata la risposta di conseguenza!
Gumbo,

1
Questo è problematico se il file è stato creato in Windows. In altre parole, le righe sono terminate con \r\nanziché \n?
Adam Plocher,

31

ECMAScript 6 introduce stringhe modello :

Le stringhe modello sono letterali stringa che consentono espressioni incorporate. È possibile utilizzare stringhe multilinea e funzioni di interpolazione delle stringhe con esse.

Per esempio,

alert(`Please Select file   
to delete`);

avviserà

Please Select file   
to delete

1
Wow fantastico. Per ottenere questi `` sulla tastiera premere MAIUSC + ´ due volte. Su una tastiera tedesca quel tasto è vicino al tasto backspace.
Nadu,

@Nadu Dipende da una tastiera. Il mio ha una `chiave. Dal momento che è un modificatore non è scritto direttamente. Questo è probabilmente il motivo per cui hai pensato di premerlo due volte, ma questo ne scriverà due. Premi la barra spaziatrice per scriverne solo una.
Oriol,

Incredibile che ci sia voluto così tanto tempo per consentire stringhe multilinea senza trucchi elaborati ... La domanda è: cosa sarà usato come separatori di riga - un carattere (i) codificato (i) o il carattere (i) di interruzione di riga del documento?
StanE,

1
Si è verificato un problema con `` nel caso in cui si desideri eseguire l'ingrandimento del file * .js.
Raskolnikov,

1
Considera che ancora a marzo 2018 solo l'89% dei browser globali utilizzati supporta stringhe di modelli secondo caniuse.com caniuse.com/#feat=template-literals
FFirmenich

7

Spezzare la corda in due pezzi 

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

9
Ma non dimenticare di avere uno spazio alla fine del primo o all'inizio del secondo pezzo;)
Majid Fouladpour

4

Interessante da notare. Provato:

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

E questo ha funzionato. Tuttavia, in caso di incidente !, c'era un carattere spaziale dopo la barra rovesciata finale (tutte le altre barre rovesciate erano alla fine della linea). E questo ha causato un errore nel javascript! La rimozione di questo spazio ha risolto l'errore, tuttavia.

Questo è in ADT per Android usando Cordova.


1
Ho trascorso gran parte della mia giornata a combattere questo problema e ho anche scoperto, grazie a te, che un personaggio spaziale dopo una delle barre stava impedendo la compilazione della mia app ionica. Grazie!
rekordboy,

1
Non riesco a credere che qualcuno abbia commentato che questo includerà qualsiasi rientro nel codice come parte della stringa, in modo che l'esempio diventiSome\n<4 spaces>string\n<4 spaces>wrapped\n<4 spaces>across\n<4 spaces>multiple lines.
JHH,

1

Puoi semplicemente usare

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

Dovrebbe funzionare


0

È possibile spezzare una costante di stringa lunga in blocchi logici e assegnarli in un array. Quindi esegui un joincon una stringa vuota come delimitatore.

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

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

L'output sarà:

  1. Questa è la prima parte .... 2. Questa è la seconda parte ..... 3. Finendo qui.

In questo modo si ottengono lievi prestazioni ma si ottengono leggibilità e manutenibilità del codice.


0

Una buona soluzione qui per gli utenti di VSCode , se una stringa suddivisa in più righe causa il problema (ho affrontato questo problema quando ho dovuto testare un token JWT lungo e in qualche modo usare i letterali dei template non ha funzionato).


-3

Ho provato alcuni dei suggerimenti sopra riportati, ma ho ricevuto un avviso di carattere ILLEGAL nella finestra di ispezione del codice Chrome. Quanto segue ha funzionato per me (testato solo su Chrome però!)

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

esce come ...

stuff on line 1
stuff on line 2

NOTA la doppia barra rovesciata !! ... questo sembra essere importante!


-5

Non è necessario alcun codice di interruzione manuale. Aggiungi \ n dove desideri interrompere.

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

Questo mostrerà l'avviso come

Please select file 
to delete.

giù votante, puoi per favore dire il motivo del voto negativo. Questa soluzione funziona sempre per me.
Narendra,

27
Non so chi abbia votato in basso o perché; ma solo un'ipotesi: l'op voleva sapere come estendere un testo letterale su più righe di codice, piuttosto che come inserire un'interruzione di riga nell'output.
Zarepheth,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.