Dalam JavaScript, backtick † tampaknya berfungsi sama dengan kutipan tunggal. Misalnya, saya bisa menggunakan backtick untuk mendefinisikan string seperti ini:
var s = `abc`;
Apakah ada cara di mana perilaku backtick sebenarnya berbeda dari kutipan tunggal?
† Perhatikan bahwa di antara programmer, "backtick" adalah satu nama untuk apa yang lebih umum disebut aksen kubur . Pemrogram juga terkadang menggunakan nama alternatif "backquote" dan "backgrave". Juga, pada Stack Overflow dan di tempat lain, ejaan umum lainnya untuk "backtick" adalah "back-tick" dan "back tick".
Jawaban:
Ini adalah fitur yang disebut templat literals .
Mereka disebut "templat string" dalam edisi sebelumnya dari spesifikasi ECMAScript 2015.
Literal templat didukung oleh Firefox 34, Chrome 41, dan Edge 12 ke atas, tetapi tidak oleh Internet Explorer.
Templat literal dapat digunakan untuk mewakili string multi-garis dan dapat menggunakan "interpolasi" untuk memasukkan variabel:
Keluaran:
Yang lebih penting, mereka dapat berisi tidak hanya nama variabel, tetapi semua ekspresi JavaScript:
sumber
["a", "b"].join(""); // both string elements written in new lines
. Tapi selain yang ini mungkin menggunakan "transpiler" seperti Babel untuk mengubah ES6 + menjadi ES5alert`1`
.ECMAScript 6 hadir dengan tipe baru string literal, menggunakan backtick sebagai pembatas. Literal ini memang memungkinkan ekspresi interpolasi string dasar untuk tertanam, yang kemudian secara otomatis diuraikan dan dievaluasi.
Seperti yang Anda lihat, kami menggunakan
`
serangkaian karakter, yang ditafsirkan sebagai string literal, tetapi setiap ekspresi bentuk${..}
diuraikan dan dievaluasi dengan segera.Satu manfaat yang sangat bagus dari literal string yang diinterpolasikan adalah mereka diizinkan untuk dipecah menjadi beberapa baris:
Ekspresi Interpolasi
Ekspresi valid apa pun diizinkan muncul di
${..}
dalam string literal yang diinterpolasi, termasuk panggilan fungsi, panggilan ekspresi fungsi inline, dan bahkan literal string yang diinterpolasi lainnya!Di sini,
`${who}s`
string literal interpolasi bagian dalam adalah kenyamanan sedikit lebih baik bagi kita ketika menggabungkanwho
variabel dengan"s"
string, sebagai lawan dariwho + "s"
. Juga untuk menyimpan catatan adalah string literal yang diinterpolasi hanya dibatasi secara leksikal di mana ia muncul, tidak secara dinamis dicakup dengan cara apa pun:Menggunakan templat literal untuk HTML jelas lebih mudah dibaca dengan mengurangi gangguan.
Cara biasa yang sederhana:
Dengan ECMAScript 6:
Literal Templat Tagged
Kami juga dapat menandai string template, ketika string template ditandai, literal dan substitusi dilewatkan ke fungsi yang mengembalikan nilai yang dihasilkan.
Kita dapat menggunakan operator spread di sini untuk memberikan beberapa nilai. Argumen pertama — kami menyebutnya string — adalah array dari semua string polos (hal-hal di antara setiap ekspresi yang diinterpolasi).
Kami kemudian mengumpulkan semua argumen berikutnya ke dalam array disebut nilai-nilai menggunakan
... gather/rest operator
, meskipun Anda tentu saja telah meninggalkan mereka sebagai parameter bernama individu mengikuti string parameter seperti yang kami lakukan di atas (value1
,value2
, dll).Argumen yang dikumpulkan ke dalam array nilai kami adalah hasil dari ekspresi interpolasi yang sudah dievaluasi yang ditemukan dalam string literal. Literal string yang ditandai adalah seperti langkah pemrosesan setelah interpolasi dievaluasi, tetapi sebelum nilai string akhir dikompilasi, memungkinkan Anda lebih mengontrol menghasilkan string dari literal. Mari kita lihat contoh membuat templat yang dapat digunakan kembali.
String mentah
Fungsi tag kami menerima argumen pertama yang kami sebut string, yang merupakan array. Tapi ada sedikit tambahan data yang disertakan: versi mentah dari semua string yang belum diproses. Anda dapat mengakses nilai-nilai string mentah menggunakan
.raw
properti, seperti ini:Seperti yang Anda lihat, versi mentah dari string mempertahankan
\n
urutan yang diloloskan , sementara versi yang diproses dari string memperlakukannya seperti baris baru nyata yang tidak terhindar . ECMAScript 6 dilengkapi dengan built-in fungsi yang dapat digunakan sebagai tag literal string yang:String.raw(..)
. Ini hanya melewati versi mentah dari string:sumber
myTaggedLiteral`test ${someText} ${2 + 3}`;
seharusnya//["test ", " "]
(yaitu bukan string yang dipangkas).Backticks (
`
) digunakan untuk mendefinisikan literal templat. Literal templat adalah fitur baru dalam ECMAScript 6 untuk mempermudah pengerjaan string.Fitur:
Catatan: kita dapat dengan mudah menggunakan tanda kutip tunggal (
'
) dan tanda kutip ganda ("
) di dalam backticks (`
).Contoh:
Untuk menginterpolasi variabel atau ekspresi kita dapat menggunakan
${expression}
notasi untuk itu.String multi-garis berarti Anda tidak perlu lagi menggunakan
\n
jalur baru.Contoh:
Keluaran:
sumber
Backticks menyertakan literal templat, yang sebelumnya dikenal sebagai string templat. Literal template adalah literal string yang memungkinkan ekspresi tertanam dan fitur interpolasi string.
Templat literal memiliki ekspresi yang tertanam di placeholder, dilambangkan dengan tanda dolar dan tanda kurung keriting di sekitar ekspresi, yaitu
${expression}
. Placeholder / ekspresi bisa diteruskan ke fungsi. Fungsi default hanya menyatukan string.Untuk menghindari backtick, letakkan backslash di depannya:
Gunakan backticks untuk lebih mudah menulis string multi-line:
atau
vs vanilla JavaScript:
atau
Escape sequence:
\u
, misalnya\u00A9
\u{}
, misalnya\u{2F804}
\x
, misalnya\xA9
\
dan (a) digit, misalnya\251
sumber
Ringkasan:
Backticks dalam JavaScript adalah fitur yang diperkenalkan dalam ECMAScript 6 // ECMAScript 2015 untuk membuat string dinamis yang mudah. Fitur ECMAScript 6 ini juga dinamai template string literal . Ini menawarkan keuntungan berikut jika dibandingkan dengan string normal:
''
atau""
) tidak diizinkan memiliki linebreak.${myVariable}
sintaks.Contoh:
Kompatibilitas browser:
Literal string templat didukung secara native oleh semua vendor browser utama (kecuali Internet Explorer). Jadi cukup menghemat untuk digunakan dalam kode produksi Anda. Daftar kompatibilitas browser yang lebih terperinci dapat ditemukan di sini .
sumber
Terlepas dari interpolasi string, Anda juga dapat memanggil fungsi menggunakan tanda centang kembali.
Periksa komponen gaya . Mereka banyak menggunakannya.
sumber
Bagian baiknya adalah kita dapat membuat matematika dasar secara langsung:
Itu menjadi sangat berguna dalam fungsi pabrik:
sumber