Non ha bisogno di aggiungere newline, solo qualcosa di leggibile.Qual è il modo più pulito per scrivere una stringa multilinea in JavaScript?
Qualcosa di meglio di questo?
str = "line 1" +
"line 2" +
"line 3";
Non ha bisogno di aggiungere newline, solo qualcosa di leggibile.Qual è il modo più pulito per scrivere una stringa multilinea in JavaScript?
Qualcosa di meglio di questo?
str = "line 1" +
"line 2" +
"line 3";
Quasi identica alla risposta di NickFitz:
var str = [""
,"line 1"
,"line 2"
,"line 3"
].join("");
// str will contain "line1line2line3"
La differenza, il codice è leggermente più gestibile perché le linee possono essere riordinate senza riguardo a dove le virgole sono. Nessun errore di sintassi.
Ciò rende anche utile si verificano interruzioni di riga automatiche con il carattere di join \ n. Molto maneggevole. –
Si potrebbe fare
str = "\
line 1\
line 2\
line 3";
Come accennato nei commenti, javascript parser gestire questo fine (opera in tutti i principali browser), ma non è ufficialmente parte della sintassi ECMA Script. Come tale può o non può funzionare con compressori, controllori di errori e non è garantito che funzioni nei browser.
Questo può essere più leggibile, ma non è il modo "migliore" per farlo. Forse lo script ECMA supporterà qualcosa come C# 's @ "" un giorno.
Wow. Questo funziona davvero. Grazie Gordon! Non sapevo che potessi fare tutto questo ... –
leggibile ma non corretto per i parser di errori js! –
@Thomas: "In ogni esempio che ho visto, hai inserito anche \ dopo la riga3." Solo che l'articolo che hai collegato a un refuso non significa che sia giusto. leggi il resto del tuo articolo, l'ha fatto solo una volta, nel primo esempio. – geowa4
Sì! È possibile use the \ character to have JavaScript ignore end of line characters.
str = 'line 1 \
line 2 \
line 3';
Tuttavia, come pointed out by Elzo Valugi, questo non convalida utilizzando JSLint.
Per quanto mi ricordo, questo non funziona in alcuni browser. Presumibilmente alcune versioni di IE. –
Ionut: Sì, avresti bisogno di testarlo in tutti i browser che ti interessano, e se dovesse fallire in un browser, sospetto che sarebbe IE. Ma ho provato questo in Firefox e funziona lì. –
FYI. Il modo in cui lo suggerisci è il modo corretto e migliore delle altre risposte. JsLint convalida solo la tua versione.
+1 per jslint. – geowa4
Suggerimento: mantieni le linee corte. Se si allungano dallo schermo, non vedi il + e diventa illeggibile. O metti il + all'inizio delle linee come suggerisce Ionut. –
Coerentemente.
In qualsiasi modo, lo si fa esattamente nello stesso modo in tutta l'applicazione. Se stai lavorando su un'applicazione che ha già scritto del codice, accetta la convenzione che hanno impostato e segui.
Peccato che non sia permesso votare più di una volta. Questa è la soluzione definitiva per perdere energia e tempo per le controversie per il "One Right Way ™" per fare le cose (così comuni nel nostro settore). – dreftymac
mi piace questa versione (diversa dalla vostra solo nella formattazione del codice):
var str = "line 1"
+ "line 2"
+ "line 3";
Sì, è più facile da capire a colpo d'occhio. –
non convalida anche questo. Ho avuto una volta una sceneggiatura con un html come questo e ho dovuto rifarlo. –
Dovevi sfuggire all'HTML, il modo in cui è costruita la stringa non ha nulla a che fare con la convalida. –
var str = [
"line 1",
"line 2",
"line 3"
].join("");
// str will contain "line1line2line3"
Se si desidera veramente a capo nella stringa, quindi sostituire .join("")
con .join("\n")
/
questo metodo è ancora più veloce rispetto all'opzione di concatenazione "str" + "str" o non ha importanza per i browser di oggi? –
join è più veloce se si dispone di parti di maaaaaaaaaa per concatenare, perché "+" sarà eseguito (n-1) volte, creando risultati temporanei in ogni passaggio. Per i dettagli, vedi http://video.yahoo.com/watch/4141759/11157560 alle 23:08 – user123444555621
Avevamo uno script che creava l'intera pagina tramite "str" + "str" ed era piuttosto lento (circa 30 secondi di pagina caricare). Abbiamo deciso di utilizzare un sistema di aggiunta basato su array come questo, che è sceso a meno di un secondo. Quindi, sì, è più veloce :) –
Funzionerà solo nei browser con supporto E4X - Vorrei poterlo utilizzare in IE
var str = <><![CDATA[
Look, a multi-line
string! < " // ' ? &
]]></>.toString();
Non è necessario il valore letterale XMLList ('<> ..>'). Puoi semplicemente fare '. ToString()' –
Hai provato? Per qualche ragione non funziona in Firefox. Secondo lo standard, una sezione XMLCDATA è XMLMarkup, quindi è un XMLInitialiser, che dovrebbe essere riconosciuto dal motore come PrimaryExpression (?) – user123444555621
Questo non è più supportato in Firefox a partire dalla versione 17. Non credo che NESSUN browser supporti adesso –
Ecco uno che potrebbe essere utile durante lo sviluppo quando si utilizza Chrome.
function FSTR(f) {
// remove up to comment start and trailing spaces and one newline
s = f.toString().replace(/^.*\/\* *\r?\n/,"");
// remove the trailing */} with preceeding spaces and newline
s = s.replace(/\n *\*\/\s*\}\s*$/,"")
return s;
}
s = FSTR(function(){/*
uniform vec2 resolution;
uniform float time;
void main(void)
{
vec2 p = -1.0 + 2.0 * gl_FragCoord.xy/resolution.xy;
vec2 cc = vec2(cos(.25*time), sin(.25*time*1.423));
...
float color = sqrt(sqrt(dmin))*0.7;
gl_FragColor = vec4(color,color,color,1.0);
}
*/});
Questo non funziona per Firefox , anche se funziona in Chrome.
L'utilizzo di esempio potrebbe essere per la scrittura/test di shale Webgl. Durante lo sviluppo è molto più semplice lavorare con e in seguito è sempre possibile eseguirlo con una semplice espressione regolare che converte quella sintassi in una versione cross-browser.
Ora funziona su Firefox e sui browser più recenti. Vedi [questa risposta] (http://stackoverflow.com/a/5571069/331508). –
Sicuramente l'esempio in questa domanda è più leggibile della risposta di @dreftymac no? –
Saluti @jasdeepkhalsa. Ci sono due modi per vederlo. L'esempio sopra è sicuramente leggibile in quanto ha un minor numero di caratteri. Il problema si presenta quando devi * interagire * con il codice, aggiungendo o rimuovendo linee o modificando l'ordine delle linee. L'esempio di dreftymac contiene più caratteri, ma è molto più semplice interagire con il codice senza innescare accidentalmente un errore di sintassi. – dreftymac