2009-02-03 6 views

risposta

219

Nel tuo esempio, è possibile suddividere la stringa in due pezzi:

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

Oppure, quando si tratta di una stringa, come nel tuo caso, è possono utilizzare un backslash come suggerito @Gumbo:

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

si noti che questo approccio backslash è not necessarily preferred, e possibilmente non supportato universalmente (ho avuto problemi nel trovare dati complessi su questo). È non nello 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(); 
} 
+0

Riesci a rompere un'istruzione if? –

+1

Sì: ho aggiornato la risposta con un esempio. –

+15

Ma fai attenzione al meccanismo di inserimento automatico del punto e virgola: cerca di avere il ritorno su una riga e una "stringa" sul successivo alla fine della funzione e ottieni un risultato indefinito. – some

37

Mettere la barra rovesciata alla fine della linea:

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

Edit devo notare che questa non è parte di ECMAScript strings come line terminating characters non sono consentito a tutti:

A 'LineTerminator' carattere non può apparire in una stringa letterale, anche se preceduta da una barra rovesciata \. Il modo corretto per far sì che un carattere di terminazione di riga sia parte del valore di stringa di un valore letterale stringa consiste nell'utilizzare una sequenza di escape come \n o \u000A.

Quindi utilizzare la concatenazione di stringhe è la scelta migliore.


Aggiorna 2015/01/05String literals in ECMAScript5 consentono la sintassi riportato:

Un carattere terminatore di linea non può apparire in una stringa letterale, non come parte di un LineContinuation per produrre il vuoto sequenza di caratteri. Il modo corretto per far sì che un carattere di terminatore di riga faccia parte del valore String di un valore letterale stringa consiste nell'utilizzare una sequenza di escape come \n o \u000A.

+1

Rocce gumbo .. !! –

+1

[ECMAScript5] (http://www.ecma-international.org/ecma-262/5.1/#sec-7.8.4) consente: "* Un carattere di terminazione di riga non può apparire in una stringa letterale, tranne come parte di a * LineContinuation * per produrre la sequenza di caratteri vuota.Il modo corretto per far sì che un carattere di terminazione di riga sia parte del valore String di un letterale stringa è utilizzare una sequenza di escape come '\ n' o' \ u000A'. * " – Oriol

+1

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

1

Si può semplicemente utilizzare

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

che dovrebbe funzionare

5

suddividere la stringa 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 blocco;) –

-4

senza bisogno di qualsiasi interruzione manuale in codice. Basta aggiungere \ n dove si desidera interrompere.

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

questo mostrerà l'avviso come

Please select file 
to delete. 
+0

down voter, puoi dirci il motivo del downvote. Questa soluzione funziona per me sempre. – Narendra

+24

Non so chi sia stato votato o perché; ma solo una supposizione: 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

3

Interessante notare. Provato:

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

E questo ha funzionato. Tuttavia, in caso di incidente !, c'era un carattere di spazio che seguiva il backslash finale (tutte le altre barre rovesciate erano alla fine della riga). E questo ha causato un errore nel javascript! La rimozione di questo spazio ha corretto l'errore, comunque.

Questo è in ADT per Android utilizzando Cordova.

+0

Ho passato la maggior parte della mia giornata a combattere questo problema e ho anche scoperto, grazie a te, che un personaggio spaziale dopo una qualsiasi delle barre stava causando la mancata compilazione della mia app ionica. Grazie! – rekordboy

-2

Ho provato alcuni dei suggerimenti sopra riportati, ma ho ricevuto un avviso di carattere ILLEGALE nella finestra di ispezione del codice di Chrome. Di seguito ha lavorato per me (testato solo in Chrome però!)

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

viene fuori come ...

stuff on line 1 
stuff on line 2 

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

21

ECMAScript 6 introduce template strings:

stringhe di modello sono stringhe letterali che permettono espressioni embedded. È possibile utilizzare le stringhe multilinea e le funzioni di interpolazione delle stringhe con .

Per esempio,

alert(`Please Select file 
to delete`); 

vi avviserà

Please Select file 
to delete 
+0

Wow fantastico. Per ottenere questi '' sulla tastiera premere SHIFT + 'due volte. Su una tastiera tedesca, quella chiave è vicino al tasto backspace. – Nadu

+0

@Nadu Dipende da una tastiera. Il mio ha una chiave '\' '. Poiché si tratta di un modificatore, non è scritto direttamente. Questo è probabilmente il motivo per cui hai pensato di doverlo premere due volte, ma questo ne scriverà due. Premi la barra spaziatrice per scriverne solo una. – Oriol

+0

Incredibile che ci sia voluto così tanto tempo per consentire stringhe multiline senza hack stravaganti ... La domanda è: cosa verrà usato come separatore di riga: un char (s) hardcoded o il carattere di interruzione di riga del documento? – StanE