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 ");

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();
}

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.


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

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");

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.


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


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.


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.)


-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!


-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.

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.