Bagaimana cara memecah string di lebih dari satu baris kode dalam JavaScript?

198

Apakah ada karakter dalam JavaScript untuk memecah baris kode sehingga dibaca sebagai kontinu meskipun berada di baris baru?

Sesuatu seperti....

1. waspada ("Silakan Pilih file   
2. \ untuk menghapus ");
TTT
sumber

Jawaban:

272

Dalam contoh Anda, Anda dapat memecah string menjadi dua bagian:

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

Atau, ketika ini adalah string, seperti dalam kasus Anda, Anda dapat menggunakan backslash seperti yang disarankan @Gumbo:

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

Perhatikan bahwa pendekatan backslash ini tidak selalu disukai , dan mungkin tidak didukung secara universal (saya mengalami kesulitan menemukan data sulit tentang ini). Itu tidak ada dalam spesifikasi ECMA 5.1 .

Ketika bekerja dengan kode lain (tidak dalam tanda kutip), jeda baris diabaikan, dan bisa diterima. Sebagai contoh:

if(SuperLongConditionWhyIsThisSoLong
  && SuperLongConditionOnAnotherLine
  && SuperLongConditionOnThirdLineSheesh)
{
    // launch_missiles();
}
Michael Haren
sumber
Bisakah Anda memecah pernyataan if?
TTT
17
Tetapi waspadalah terhadap mekanisme penyisipan titik koma otomatis: Cobalah untuk memiliki kembali pada satu baris dan "string" pada yang berikutnya di akhir fungsi dan Anda mendapatkan undefined sebagai hasilnya.
Beberapa
Apakah ini sesuai standar? Apakah semua browser yang sesuai mendukungnya? Apakah browser lama mendukungnya hari ini? Tak satu pun dari pertanyaan-pertanyaan penting ini dibahas, -1.
ulidtko
3
Nah ... jika Anda akan mengajukan banyak pertanyaan baru yang belum diajukan, Anda harus memberi kami kesempatan untuk menjawabnya. Saya memperbarui jawaban saya dengan dugaan yang tidak memuaskan.
Michael Haren
2
Waspadalah terhadap backslash. Itu akan memakan semua blancks sampai menemukan no-blank. Jadi contohnya akan "mengingatkan": Silakan pilih fileto delete. Jika Anda ingin ruang putih antara file dan, Anda harus meletakkannya sebelum de backslash.
jgomo3
41

Letakkan garis miring terbalik di akhir baris:

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

Sunting     Saya harus mencatat bahwa ini bukan bagian dari string ECMAScript karena karakter penghentian baris sama sekali tidak diperbolehkan:

Karakter ' LineTerminator ' tidak dapat muncul dalam string literal, bahkan jika didahului oleh garis miring terbalik \. Cara yang benar untuk menyebabkan karakter terminator garis menjadi bagian dari nilai string literal string adalah dengan menggunakan urutan escape seperti \natau \u000A.

Jadi menggunakan penggabungan string adalah pilihan yang lebih baik.


Pembaruan 2015-01-05     String literal di ECMAScript5 memungkinkan sintaks yang disebutkan:

Karakter terminator garis tidak dapat muncul dalam string literal, kecuali sebagai bagian dari LineContinuation untuk menghasilkan urutan karakter kosong. Cara yang benar untuk menyebabkan karakter terminator garis menjadi bagian dari nilai String dari string literal adalah dengan menggunakan urutan escape seperti \natau \u000A.

Gumbo
sumber
1
ECMAScript5 memungkinkannya: " Karakter terminator garis tidak dapat muncul dalam string literal, kecuali sebagai bagian dari LineContinuation untuk menghasilkan urutan karakter kosong. Cara yang benar untuk menyebabkan karakter terminator garis menjadi bagian dari nilai String string string literal adalah untuk menggunakan urutan pelarian seperti \natau \u000A. "
Oriol
1
@Oriol Terima kasih atas catatannya, perbarui jawabannya!
Gumbo
1
Apakah ini bermasalah jika file tersebut dibuat di Windows. Dengan kata lain, baris yang diakhiri dengan \r\nalih - alih \n?
Adam Plocher
31

ECMAScript 6 memperkenalkan string template :

String template adalah string literal yang memungkinkan ekspresi tersemat. Anda dapat menggunakan fitur multi-line string dan string interpolasi.

Sebagai contoh,

alert(`Please Select file   
to delete`);

akan mengingatkan

Please Select file   
to delete
Oriol
sumber
1
Wow Keren. Untuk mendapatkan ini `` pada keyboard tekan SHIFT + ´ dua kali. Pada keyboard Jerman tombol itu berada di dekat tombol backspace.
Nadu
@ Nadu Itu tergantung pada keyboard. Milik saya memiliki `kunci. Karena itu adalah pengubah itu tidak ditulis secara langsung. Itu mungkin mengapa Anda berpikir Anda harus menekannya dua kali, tetapi itu akan menulis dua di antaranya. Tekan bilah spasi untuk menulis hanya satu.
Oriol
Sulit dipercaya bahwa butuh waktu lama untuk memungkinkan string multiline tanpa hack mewah ... Pertanyaannya adalah: Apa yang akan digunakan sebagai pemisah garis - char yang dikodekan atau char baris pemecah dokumen?
StanE
1
Ada masalah dengan `` dalam kasus ketika Anda ingin melakukan perbesaran file * .js.
Raskolnikov
1
Pertimbangkan, yang masih Mar 2018 hanya 89% dari browser digunakan global yang mendukung string template yang sesuai dengan caniuse.com caniuse.com/#feat=template-literals
FFirmenich
7

Pisahkan string menjadi dua bagian 

alert ("Please select file " +
       "to delete");
Jason Punyon
sumber
9
Tetapi jangan lupa untuk memiliki ruang di akhir bagian pertama atau awal bagian kedua;)
Majid Fouladpour
4

Menarik untuk diperhatikan. Mencoba:

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

Dan ini berhasil. Namun, pada kecelakaan !, ada karakter spasi setelah backslash terakhir (semua backslash lainnya ada di akhir baris). Dan ini menyebabkan kesalahan pada javascript! Menghapus ruang ini memperbaiki kesalahan.

Ini ada di ADT untuk Android menggunakan Cordova.

Sana
sumber
1
Menghabiskan sebagian besar hari saya melawan masalah ini dan saya juga menemukan, terima kasih kepada Anda, bahwa karakter spasi setelah salah satu garis miring menyebabkan aplikasi ion saya tidak dapat dikompilasi. Terima kasih!
rekordboy
1
Tidak percaya ada yang berkomentar bahwa ini akan memasukkan lekukan apa pun dalam kode sebagai bagian dari string, sehingga contohnya menjadiSome\n<4 spaces>string\n<4 spaces>wrapped\n<4 spaces>across\n<4 spaces>multiple lines.
JHH
1

Anda bisa menggunakannya

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

Itu seharusnya bekerja

Jaime Garcia
sumber
0

Anda dapat memecah konstanta string panjang menjadi potongan logis dan menetapkannya ke dalam array. Kemudian lakukan joindengan string kosong sebagai pembatas.

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

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

Output akan menjadi:

  1. Ini adalah bagian pertama .... 2. Ini adalah bagian kedua ..... 3. Menyelesaikan di sini.

Ada sedikit kinerja yang terjadi dengan cara ini, tetapi Anda memperoleh keterbacaan dan pemeliharaan kode.

blackcatweb
sumber
0

Solusi yang bagus di sini untuk pengguna VSCode , jika string yang terpecah menjadi beberapa baris menyebabkan masalah (saya menghadapi ini ketika saya harus menguji token JWT yang panjang, dan entah bagaimana menggunakan templat literal tidak melakukan triknya.)

Sujit Y. Kulkarni
sumber
-3

Saya mencoba sejumlah saran di atas tetapi mendapat peringatan karakter ILLEGAL di inspektur kode Chrome. Berikut ini bekerja untuk saya (hanya diuji di Chrome!)

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

keluar seperti ...

stuff on line 1
stuff on line 2

Perhatikan double backslash !! ... ini sepertinya penting!

onionjohnny
sumber
-5

Tidak perlu adanya pembobolan kode secara manual. Cukup tambahkan \ n di tempat yang ingin Anda hancurkan.

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

Ini akan menampilkan peringatan seperti

Please select file 
to delete.
Narendra
sumber
pemilih bawah, bisakah Anda memberi tahu alasan untuk downvote Solusi ini selalu bekerja untuk saya.
Narendra
27
Saya tidak tahu siapa yang memilih atau mengapa; tetapi hanya sebuah tebakan: op ingin tahu bagaimana cara memperluas teks literal melintasi beberapa baris kode, daripada bagaimana memasukkan satu baris dalam output.
Zarepheth