Jak przerwać ciąg w więcej niż jednym wierszu kodu w JavaScript?

198

Czy w JavaScript jest znak dzielący wiersz kodu, który jest czytany jako ciągły, mimo że znajduje się w nowym wierszu?

Coś jak....

1. alert („Wybierz plik   
2. \, aby usunąć ");
TTT
źródło

Odpowiedzi:

272

W twoim przykładzie możesz podzielić sznurek na dwie części:

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

Lub, gdy jest to ciąg znaków, tak jak w twoim przypadku, możesz użyć ukośnika odwrotnego, jak sugerował @Gumbo:

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

Zauważ, że to podejście z odwrotnym ukośnikiem niekoniecznie jest preferowane i być może nie jest powszechnie obsługiwane (miałem problem ze znalezieniem twardych danych na ten temat). Nie ma go w specyfikacji ECMA 5.1 .

Podczas pracy z innym kodem (nie w cudzysłowach) podziały wierszy są ignorowane i całkowicie dopuszczalne. Na przykład:

if(SuperLongConditionWhyIsThisSoLong
  && SuperLongConditionOnAnotherLine
  && SuperLongConditionOnThirdLineSheesh)
{
    // launch_missiles();
}
Michael Haren
źródło
Czy możesz rozbić instrukcję if?
TTT
17
Ale uwaga na automatyczny mechanizm wstawiania średników: spróbuj uzyskać zwrot w jednym wierszu i „ciąg” w następnym wierszu na końcu funkcji, w wyniku czego zostaniesz niezdefiniowany.
jakieś
Czy to jest zgodne ze standardami? Czy wszystkie zgodne przeglądarki będą go obsługiwać? Czy starsze przeglądarki obsługują go dzisiaj? Żadne z tych ważnych pytań nie zostało uwzględnione, -1.
ulidtko
3
Cóż ... jeśli masz zamiar zadać kilka nowych pytań, które jeszcze nie zostały zadane, musisz dać nam szansę na odpowiedź. Zaktualizowałem swoją odpowiedź niezadowalającą hipotezą.
Michael Haren
2
Uważaj na odwrotny ukośnik. Zje wszystkie blanck, dopóki nie znajdzie pustego miejsca. Tak więc przykład „ostrzeże”: Wybierz plik do usunięcia. Jeśli chcesz spację między plikiem a do, powinieneś umieścić ją przed odwrotnym ukośnikiem.
jgomo3
41

Umieść odwrotny ukośnik na końcu linii:

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

Edytuj     Muszę zauważyć, że nie jest to część ciągów ECMAScript, ponieważ znaki kończące linie w ogóle są niedozwolone:

Znak „ LineTerminator ” nie może występować w literale ciągu, nawet jeśli poprzedzony jest odwrotnym ukośnikiem \. Prawidłowym sposobem spowodowania, aby znak końca linii był częścią wartości ciągu literału ciągu, jest użycie sekwencji zmiany znaczenia, takiej jak \nlub \u000A.

Zatem użycie konkatenacji łańcuchów jest lepszym wyborem.


Aktualizacja 2015-01-05     Literały łańcuchowe w ECMAScript5 pozwalają na wspomnianą składnię:

Znak końca linii nie może występować w literale ciągu, chyba że jako część LineContinuation w celu utworzenia pustej sekwencji znaków. Prawidłowym sposobem spowodowania, aby znak końca linii był częścią wartości ciągu literału ciągu, jest użycie sekwencji zmiany znaczenia, takiej jak \nlub \u000A.

Gumbo
źródło
1
ECMAScript5 zezwala na to: „ Znak końca linii nie może występować w literale łańcucha, chyba że jako część LineContinuation produkuje pustą sekwencję znaków. Prawidłowym sposobem spowodowania, aby znak końca linii był częścią wartości ciągu literału łańcucha, jest użyć sekwencji ucieczki, takiej jak \nlub \u000A.
Oriol
1
@Oriol Dzięki za notatkę, odpowiednio zaktualizowałem odpowiedź!
Gumbo,
1
Czy jest to problematyczne, jeśli plik został utworzony w systemie Windows. Innymi słowy linie zakończone \r\nzamiast \n?
Adam Plocher,
31

ECMAScript 6 wprowadza ciągi szablonów :

Ciągi szablonów są literałami ciągów, umożliwiającymi osadzanie wyrażeń. Możesz używać z nimi ciągów wieloliniowych i funkcji interpolacji ciągów.

Na przykład,

alert(`Please Select file   
to delete`);

zaalarmuje

Please Select file   
to delete
Oriol
źródło
1
Łał fantastycznie. Aby uzyskać te `` na klawiaturze, naciśnij SHIFT + ´ dwa razy. Na niemieckiej klawiaturze klawisz ten znajduje się w pobliżu klawisza Backspace.
Nadu,
@Nadu To zależy od klawiatury. Mój ma `klucz. Ponieważ jest to modyfikator, nie jest zapisywany bezpośrednio. Prawdopodobnie dlatego pomyślałeś, że powinieneś nacisnąć go dwa razy, ale to zapisze dwa z nich. Naciśnij spację, aby napisać tylko jeden.
Oriol
Niewiarygodne, że tak długo trwało zezwolenie na wieloliniowe łańcuchy bez fantazyjnych hacków ... Pytanie brzmi: co będzie używane jako separatory linii - zakodowany (-e) znak (-y) lub znak (-y) podziału wiersza dokumentu?
StanE
1
Występuje problem z `` w przypadku, gdy chcesz zrobić powiększenie pliku * .js.
Raskolnikov
1
Weź pod uwagę, że jeszcze w marcu 2018 r. Tylko 89% globalnie używanych przeglądarek obsługuje ciągi szablonów według caniuse.com caniuse.com/#feat=template-literals
FFirmenich
7

Podziel sznurek na dwie części 

alert ("Please select file " +
       "to delete");
Jason Punyon
źródło
9
Ale nie zapomnij o spacji na końcu pierwszego lub na początku drugiego fragmentu;)
Majid Fouladpour
4

Ciekawe do odnotowania. Wypróbowany:

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

I to zadziałało. Jednak przypadkowo! Po ostatnim odwrotnym ukośniku pojawił się znak spacji (wszystkie pozostałe odwrotne ukośniki znajdowały się na końcu linii). A to spowodowało błąd w javascript! Usunięcie tego miejsca naprawiło błąd.

To jest w ADT na Androida za pomocą Cordova.

Tam
źródło
1
Spędziłem większość dnia walcząc z tym problemem, a także dzięki tobie odkryłem, że znak spacji po którymkolwiek z ukośników powoduje, że moja aplikacja jonowa nie kompiluje się. Dziękuję Ci!
rekordboy
1
Nie mogę uwierzyć, że ktokolwiek skomentował, że będzie to obejmowało wszelkie wcięcia w kodzie jako część łańcucha, tak że przykładem będzieSome\n<4 spaces>string\n<4 spaces>wrapped\n<4 spaces>across\n<4 spaces>multiple lines.
JHH
1

Możesz po prostu użyć

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

To powinno działać

Jaime Garcia
źródło
0

Możesz podzielić długą ciąg znaków na logiczne fragmenty i przypisać je do tablicy. Następnie wykonaj a joinz pustym ciągiem jako separatorem.

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

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

Dane wyjściowe będą:

  1. To jest pierwsza część .... 2. To druga część ..... 3. Kończę tutaj.

W ten sposób osiągnięto niewielką wydajność, ale zyskujesz na czytelności kodu i łatwości konserwacji.

blackcatweb
źródło
0

Dobrym rozwiązaniem dla użytkowników VSCode , jeśli problem powoduje podział łańcucha na wiele linii (stanąłem przed tym, gdy musiałem przetestować długi token JWT i jakoś użycie literałów szablonów nie załatwiło sprawy).

Sujit Y. Kulkarni
źródło
-3

Wypróbowałem kilka powyższych sugestii, ale otrzymałem NIELEGALNE ostrzeżenie o znaku w inspektorze kodu Chrome. Poniższe działało dla mnie (tylko przetestowane w Chrome!)

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

wychodzi jak ...

stuff on line 1
stuff on line 2

UWAGA podwójny ukośnik !! ... wydaje się to ważne!

cebula
źródło
-5

Nie ma potrzeby ręcznego łamania kodu. Po prostu dodaj \ n tam, gdzie chcesz się zepsuć.

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

To pokaże ostrzeżenie jak

Please select file 
to delete.
Narendra
źródło
głosuj w dół, czy możesz podać powód oddania głosu. To rozwiązanie zawsze działa dla mnie.
Narendra
27
Nie wiem, kto głosował i dlaczego; ale tylko zgadnij: operacja chciała wiedzieć, jak rozszerzyć literał tekstu na wiele wierszy kodu, a nie jak wstawić podział wiersza na wyjściu.
Zarepheth