Wie kann ich eine Zeichenfolge in JavaScript über mehrere Codezeilen hinweg unterbrechen?

198

Gibt es in JavaScript ein Zeichen, das eine Codezeile so aufteilt, dass sie trotz einer neuen Zeile als fortlaufend gelesen wird?

Etwas wie....

1. alert ("Bitte Datei auswählen   
2. \ zu löschen ");
TTT
quelle

Antworten:

272

In Ihrem Beispiel können Sie die Zeichenfolge in zwei Teile teilen:

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

Wenn es sich wie in Ihrem Fall um eine Zeichenfolge handelt, können Sie einen Backslash verwenden, wie von @Gumbo vorgeschlagen:

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

Beachten Sie, dass dieser Backslash-Ansatz nicht unbedingt bevorzugt und möglicherweise nicht allgemein unterstützt wird (ich hatte Probleme, harte Daten dazu zu finden). Es ist nicht in der ECMA 5.1-Spezifikation enthalten .

Bei der Arbeit mit anderem Code (nicht in Anführungszeichen) werden Zeilenumbrüche ignoriert und sind durchaus akzeptabel. Beispielsweise:

if(SuperLongConditionWhyIsThisSoLong
  && SuperLongConditionOnAnotherLine
  && SuperLongConditionOnThirdLineSheesh)
{
    // launch_missiles();
}
Michael Haren
quelle
Können Sie eine if-Anweisung auflösen?
TTT
17
Beachten Sie jedoch den automatischen Einfügungsmechanismus für Semikolons: Versuchen Sie, am Ende der Funktion eine Zeile und in der nächsten eine "Zeichenfolge" zurückzugeben, und Sie werden dadurch undefiniert.
einige
Ist das standardkonform? Werden alle kompatiblen Browser dies unterstützen? Sie älterer Browser es heute unterstützen? Keine dieser wichtigen Fragen behandelt, -1.
Ulidtko
3
Nun ... wenn Sie eine Reihe neuer Fragen stellen möchten, die noch nicht gestellt wurden, müssen Sie uns die Möglichkeit geben, diese zu beantworten. Ich habe meine Antwort mit einer unbefriedigenden Vermutung aktualisiert.
Michael Haren
2
Vorsicht vor Rückschlägen. Es frisst alle Blancks, bis es ein No-Blank findet. Das Beispiel wird also "alarmieren": Bitte wählen Sie "Datei zum Löschen". Wenn Sie den Leerraum zwischen Datei und zu möchten, sollten Sie ihn vor dem Backslash einfügen.
jgomo3
41

Setzen Sie den Backslash am Ende der Zeile:

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

Bearbeiten     Ich muss beachten, dass dies nicht Teil von ECMAScript-Zeichenfolgen ist, da Zeilenabschlusszeichen überhaupt nicht zulässig sind:

Ein ' LineTerminator' -Zeichen kann nicht in einem Zeichenfolgenliteral angezeigt werden , auch wenn ein Backslash vorangestellt ist \. Der richtige Weg, um zu bewirken, dass ein Zeilenabschlusszeichen Teil des Zeichenfolgenwerts eines Zeichenfolgenliteral ist, besteht darin, eine Escape-Sequenz wie \noder zu verwenden \u000A.

Daher ist die Verwendung der Zeichenfolgenverkettung die bessere Wahl.


Update 2015-01-05     String-Literale in ECMAScript5 ermöglichen die erwähnte Syntax:

Ein Zeilenabschlusszeichen kann in einem Zeichenfolgenliteral nur als Teil einer LineContinuation angezeigt werden , um die leere Zeichenfolge zu erstellen. Der richtige Weg, um zu bewirken, dass ein Zeilenabschlusszeichen Teil des String-Werts eines String-Literal ist, ist die Verwendung einer Escape-Sequenz wie \noder \u000A.

Gumbo
quelle
1
ECMAScript5 erlaubt Folgendes : " Ein Zeilenabschlusszeichen kann nur in einem Zeichenfolgenliteral angezeigt werden , wenn dies als Teil einer LineContinuation zur Erzeugung der leeren Zeichenfolge erfolgt. Die richtige Methode, um zu bewirken, dass ein\n\u000A Zeilenabschlusszeichen Teil des Zeichenfolgenwerts eines Zeichenfolgenliterals ist, ist eine Escape-Sequenz wie oder zu verwenden . "
Oriol
1
@Oriol Danke für den Hinweis, die Antwort entsprechend aktualisiert!
Gumbo
1
Ist dies problematisch, wenn die Datei in Windows erstellt wurde. Mit anderen Worten, Zeilen, die mit \r\nstatt \n?
Adam Plocher
31

ECMAScript 6 führt Vorlagenzeichenfolgen ein :

Vorlagenzeichenfolgen sind Zeichenfolgenliterale, die eingebettete Ausdrücke ermöglichen. Sie können damit mehrzeilige Zeichenfolgen und Zeichenfolgeninterpolationsfunktionen verwenden.

Beispielsweise,

alert(`Please Select file   
to delete`);

wird alarmieren

Please Select file   
to delete
Oriol
quelle
1
Wow cool. Um diese `` auf die Tastatur zu bekommen, drücken Sie zweimal UMSCHALT + ´. Auf einer deutschen Tastatur befindet sich diese Taste in der Nähe der Rücktaste.
Nadu
@ Nadu Das hängt von einer Tastatur ab. Meins hat einen `Schlüssel. Da es sich um einen Modifikator handelt, wird er nicht direkt geschrieben. Das ist wahrscheinlich der Grund, warum Sie dachten, Sie sollten es zweimal drücken, aber das wird zwei davon schreiben. Drücken Sie die Leertaste, um nur eine zu schreiben.
Oriol
Unglaublich, dass es so lange gedauert hat, mehrzeilige Zeichenfolgen ohne ausgefallene Hacks zuzulassen ... Die Frage ist: Was wird als Zeilentrennzeichen verwendet - ein fest codiertes Zeichen oder ein Zeilenumbruchzeichen des Dokuments?
StanE
1
Es gibt ein Problem mit `` für den Fall, dass Sie die * .js-Datei vergrößern möchten.
Raskolnikov
1
Bedenken Sie, dass noch im März 2018 nur 89% der weltweit verwendeten Browser Vorlagenzeichenfolgen gemäß caniuse.com caniuse.com/#feat=template-literals
FFirmenich
7

Brechen Sie die Schnur in zwei Teile 

alert ("Please select file " +
       "to delete");
Jason Punyon
quelle
9
Aber vergessen Sie nicht, am Ende des ersten oder am Anfang des zweiten
Teils
4

Interessant zu bemerken. Versucht:

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

Und das hat funktioniert. Bei einem Unfall! Gab es nach dem letzten Backslash ein Leerzeichen (alle anderen Backslashes befanden sich am Ende der Zeile). Und das hat einen Fehler im Javascript verursacht! Durch Entfernen dieses Leerzeichens wurde der Fehler jedoch behoben.

Dies ist in ADT für Android mit Cordova.

Dort
quelle
1
Ich habe den größten Teil meines Tages damit verbracht, dieses Problem zu bekämpfen, und dank Ihnen habe ich auch festgestellt, dass ein Leerzeichen nach einem der Schrägstriche dazu führte, dass meine ionische App nicht kompiliert wurde. Danke dir!
rekordboy
1
Ich kann nicht glauben, dass jemand kommentiert hat, dass dies die Einrückung im Code als Teil der Zeichenfolge enthält, so dass das BeispielSome\n<4 spaces>string\n<4 spaces>wrapped\n<4 spaces>across\n<4 spaces>multiple lines.
JHH
1

Sie können einfach verwenden

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

Das sollte funktionieren

Jaime Garcia
quelle
0

Sie können eine lange Zeichenfolgenkonstante in logische Blöcke aufteilen und sie einem Array zuweisen. Führen Sie dann eine joinmit einer leeren Zeichenfolge als Trennzeichen aus.

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

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

Ausgabe wird sein:

  1. Dies ist der erste Teil .... 2. Dies ist der zweite Teil ..... 3. Hier fertig werden.

Auf diese Weise wird die Leistung leicht beeinträchtigt, aber Sie gewinnen an Lesbarkeit und Wartbarkeit des Codes.

blackcatweb
quelle
0

Eine gute Lösung für VSCode-Benutzer , wenn eine in mehrere Zeilen zerlegte Zeichenfolge das Problem verursacht (ich hatte dies, als ich ein langes JWT-Token testen musste und irgendwie die Verwendung von Vorlagenliteralen nicht ausreichte).

Sujit Y. Kulkarni
quelle
-3

Ich habe einige der oben genannten Vorschläge ausprobiert, aber im Chrome-Code-Inspektor eine ILLEGALE Zeichenwarnung erhalten. Folgendes hat bei mir funktioniert (allerdings nur in Chrome getestet!)

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

kommt raus wie ...

stuff on line 1
stuff on line 2

HINWEIS der doppelte Backslash !! ... das scheint wichtig zu sein!

Zwiebeljohnny
quelle
-5

Keine manuelle Code-Unterbrechung erforderlich. Fügen Sie einfach \ n hinzu, wo Sie brechen möchten.

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

Dies zeigt die Warnung wie

Please select file 
to delete.
Narendra
quelle
Down-Wähler, können Sie bitte den Grund für die Downvote angeben. Diese Lösung funktioniert bei mir immer.
Narendra
27
Ich weiß nicht, wer gewählt hat oder warum; aber nur eine Vermutung: Die Operation wollte wissen, wie ein Textliteral über mehrere Codezeilen erweitert werden kann, anstatt einen Zeilenumbruch in die Ausgabe einzufügen.
Zarepheth