Di Javascript, data teks disimpan sebagai string. Tidak ada tipe data sendiri untuk satu buah karakter. UTF-16 selalu digunakan sebagai format internal string, hal tersebut tidak terikat dengan jenis encoding yang digunakan oleh halaman. Mari kita lihat berbagai jenis petik. String dapat ditutup dengan petik satu, petik dua, maupun backtick:
Petik satu dan petik dua kurang lebih hampir sama. Akan tetapi backtick memiliki perbedaan, yaitu memperbolehkan kita untuk menyisipkan ekspresi ke dalam string, dengan menaruhnya di dalam 0:
Kelebihan backtick yang lain yaitu backtick memperbolehkan sebuah string untuk terdiri lebih dari satu baris:
Lebih rapi, kan? Tetapi petik satu atau dua tidak bekerja seperti itu. Jika kita coba untuk menggunakan mereka untuk lebih dari satu baris, akan terjadi error:
Petik satu dan petik dua berasal dari masa lalu saat bahasa pemrograman dibuat, dimana kebutuhan untuk string lebih dari satu baris belum dipikirkan. Backtick muncul di kemudian hari, dan lebih fleksibel. Backtick juga memperbolehkan kita untuk menspesifikasi “fungsi template” sebelum backtick pertama. Syntaxnya yaitu: 1. Fungsi 2 dipanggil secara otomatis, menerima string dan ekspresi yang berada di dalamnya dan bisa memproses mereka. Ini disebut “tagged templates”. Fitur ini membuat implementasi kustom templating lebih mudah, tapi jaran dipakai dalam praktik. Kamu bisa membaca lebih tentang ini di .Masih mungkin untuk membuat string dengan banyak baris menggunakan petik satu atau petik dua dengan menggunakan “karakter newline”, ditulis seperti berikut 3, yang menandakan baris baru:
Sebagai contoh, kedua baris berikut sama saja, hanya ditulis dengan cara yang berbeda:
Ada karakter spesial lain, tetapi mereka jarang digunakan Berikut adalah daftar lengkapnya: CharacterDescription 3Baris baru 5Carriage return: tidak digunakan sendiri. File teks milik di Windows menggunakan kombinasi dari dua karakter 6 untuk menandakan baris baru. 7, 8Petik-petik 9Backslash 0Tab 1, 2, 3Backspace, Form Feed, Vertical Tab – tetap bisa digunakan untuk kompabilitas, sekarang sudah tidak digunakan. 4Karakter unicode dengan nilai heksadesimal 5, misalnya 6 itu sama saja dengan 7. 8Sebuah simbol unicode dengan nilai heksadesimal 9 di dalam encoding UTF-16, sebagai contoh 0 – adalah sebuah unicode untuk simbol copyright 1. Simbol ini harus terdiri dari 4 digit heksadesimal. 2 (1 to 6 karakter heksadesimal)Sebuah simbol unicode dengan encoding UTF-32. Beberapa karakter langka menggunakan dua simbol unicode, yang memakan 4 byte. Dengan cara ini kita dapat menggunakan kode yang panjang.Contoh dengan unicode:
Karakter-karakter spesial yang diawali dengan karakter backslash 3 kadang dipanggil dengan sebutan “escape character”.Kita kadang dapat menggunakannya apabila kita ingin menggunakan petik di dalam string. Misalnya:
Seperti yang kita lihat, kita harus menambahkan backslash di depan petik yang di dalam string 7, karena jika tidak petik tersebut akan menandakan akhir dari sebuah string.Tentu saja, hanya jenis petik yang sama dengan penutup string yang perlu di “escape”. Jadi, solusi yang lebih elegan yaitu mengganti petik satu menjadi petik dua atau backtick:
Ingat bahwa backslash 3 hanya dipakai untuk Javascript agar dapat membaca string dengan benar. Di dalam memori, string tidak memiliki 3. Anda dapat melihatnya secara langsung pada contoh 7 di atas.Tetapi bagaimana jika kita ingin menampilkan backslash 3 di dalam sebuah string?Hal tersebut bisa dilakukan, tetapi kita harus menulisnya dua kali seperti ini 9:
Properti 0 memiliki panjang dari string: 0Perlu diingat bahwa 3 adalah sebuah karakter spesial, jadi panjang dari string adalah 2.
Orang dengan latar belakang di bahasa pemrograman lain kadang salah mengetik 4 alih-alih 5. Hal tersebut tidak bekerja.Perlu diingat bahwa 5 adalah properti numerik, bukan sebuah fungsi. Tidak perlu menambahkan kurung di belakangnya.Untuk mengakses karakter pada posisi 7, digunakan kurung kotak 8 atau dengan method str.charAt(pos). Karakter pertama dimulai dari posisi ke-0: 1Kurung kotak adalah cara modern untuk mengakses sebuah karakter, sementara 9 ada karena alasan historis.Perbedaan satu-satunya di antara mereka adalah apabila tidak ada karakter yang ditemukan, 0 mengembalikan 1, dan 9 mengembalikan string kosong: 2Kita juga bisa mengakses karakter per karakter menggunakan sintaks 3: 3Nilai string tidak dapat diubah di Javascript. Tak mungkin mengubah sebuah karakter. Mari kita coba buktikan: 4Salah satu cara untuk mengatasi hal tersebut adalah untuk membuat string baru lalu memasukkan nilainya ke 4.Sebagai contoh: 5Di bab ini kita akan melihat contoh lebih banyak dari ini. Metode toLowerCase() dan toUpperCase() mengganti case: 6Atau, apabila kita hanya ingin sebuah karakter yang diubah menjadi huruf kecil: 7Ada banyak cara untuk mencari sebuah substring di dalam sebuah string. Cara yang pertama yaitu str.indexOf(substr, pos). Method ini mencari 5 di dalam 4, mulai dari posisi 7 yang diberikan, dan mengembalikan posisi dimana substring ditemukan atau 8 jika tidak ditemukan.Misalnya: 8Parameter kedua yang opsional memperbolehkan kita untuk mencari dari posisi yang ditentukan. Misalnya, kemunculan pertama 9 ada di posisi 00. Untuk mencari kemunculan berikutnya, ayo kita mulai pencarian dari posisi 01: 9Jika kita tertarik dengan semua kemunculan, kita bisa menjalankan 02 di dalam loop. Setiap panggilan dibuat dengan posisi setelah kemunculan sebelumnya: 0Algoritma yang sama dapat ditulis lebih pendek: 1
Ada juga method yang hampir sama str.lastIndexOf(substr, position) yang mencari dari akhir sebuah string sampai ke awalnya. Cara tersebut akan menemukan kemunculan dalam urutan yang terbalik. Ada sedikit kerepotan dalam menggunakan 02 di dalam 05. Kita tidak dapat menggunakannya seperti ini: 2Contoh di atas tidak bekerja karena 06 mengembalikan 07 (artinya kemunculan ditemukan di awal string). 05 menganggap 07 sebagai 10.Jadi, kita harus mengecek dengan nilai 8, seperti ini: 3Salah satu trik lama yang digunakan disini adalah operator 12. Operator ini mengubah angka menjadi integer 32-bit (menghilangkan bagian desimal jika ada) lalu menegasikan semua bit pada representasi binernya.Dalam praktik, hal tersebut berarti: untuk integer 32-bit 13 sama dengan 14.Sebagai contoh: 4Seperti yang kita lihat, 13 bernilai nol apabila 16 (untuk semua signed integer 17).Jadi, pengecekan di dalam 18 bernilai benar apabila hasil dari 02 tidak bernilai 8. Dengan kata lain, jika kemunculan ditemukan.Orang-orang menggunakannya untuk memperpendek pengecekan 02: 5Biasanya tidak direkomendasikan untuk menggunakan fitur bahasa dengan cara yang tidak jelas, tetapi trik ini biasa digunakan di kode yang kuno, jadi kita harus memahaminya. Ingat: 22 dibaca sebagai “if ditemukan”.Untuk lebih detail, karena bilangan yang besar dipotong menjadi 32-bit oleh operator 12, ada angka lain yang memberikan hasil 07, angka yang terkecil yaitu 25. Hal tersebut menyebabkan trik ini benar apabila string yang dites tidak sepanjang itu.Kita dapat melihat bahwa trik ini hanya digunakan di kode yang kuno, karena Javascript modern menyediakan method 26 (lihat di bawah).Method yang lebih modern str.includes(substr, pos) mengembalikan 27 tergantung dengan apakah 4 mengandung 5 di dalamnya.Ini adalah pilihan yang cocok apabila kita hanya perlu mengetes apakah 5 ada, tetapi tidak memerlukan posisinya: 6Parameter opsinal kedua dari 31 adalah posisi dimana pencarian mulai dilakukan: 7Method str.startsWith dan str.endsWith melakukan fungsi seperti namanya: 8Ada 3 cara untuk mengambil sebuah substring di Javascript: 32, 5 dan 34. 35Mengembalikan bagian dari string dari 36 sampai (tapi tidak termasuk) 37.Sebagai contoh: 9Jika tidak ada parameter kedua, maka 34 akan mengambil semua bagian dari 36 sampai akhir string: 0Nilai negatif untuk 40 juga bisa digunakan. Nilai negatif berarti posisinya dihitung dari akhir string: 1 41Mengembalikan bagian dari string di antara 36 dan 37.Method ini hampir sama dengan 34, tetapi nilai 36 boleh lebih besar daripada 37.Sebagai contoh: 2Parameter negatif tidak didukung (tidak seperti slice), mereka dianggap sebagai 07. 48Mengembalikan substring dari 36, dengan panjang 0.Dibandingkan dengan cara-cara sebelumnya, cara ini memperbolehkan kita untuk menyebutkan 0 alih-alih posisi akhir dari string: 3Parameter pertama mungkin bernilai negatif, untuk menghitung dari akhir string: 4Mari kita review cara-cara tersebut untuk menghindari kebingungan: methodmengambil…negatives 52dari 36 sampai 37 (tidak termasuk 37)nilai negatif diperbolehkan 56antara 36 dan 37nilai negatif berarti mean 07 60dari 36 ambil 0 karakter 36 negatif diperbolehkanCara mana yang harus kita gunakan? Semuanya dapat melakukan pekerjaannya. Secara formal, 5 memiliki kekurangan: fungsi ini tidak tercantum di spesifikasi inti Javascript, tetapi di Annex B, yang mencakup hanya fitur browser yang ada karena alasan historis. Jadi, environment non-browser mungkin gagal untuk mendukungnya. Tetapi dalam praktik fungsi ini bekerja di mana saja.Dibandingkan dengan dua varian yang lain, 34 lebih fleksibel, karena memperbolehkan parameter negatif dan lebih pendek untuk ditulis. Jadi, dari ketiga cara sudah cukup untuk mengingat 34.Seperti yang kita tahu dari bab Perbandingan, string dibandingkan karakter per karakter dengan urutan alfabet. Akan tetapi, ada beberapa pengecualian.
Untuk memahami apa yang terjadi, mari kita review representasi internal string di Javascript. Semua string menggunakan encoding UTF-16. Yaitu: setiap karakter memiliki masing-masing kode numerik. Ada method spesial yang memperbolehkan kita untuk mengambil karakter dari kode dan sebaliknya. 69Mengembalikan kode untuk karakter pada posisi 7: 7 71Membuat sebuah karakter berdasarkan 72 numeriknya 8Kita juga dapat membuat karakter unicode dengan kode mereka menggunakan 73 yang diikuti oleh kode heksadesimal: 9Sekarang mari kita lihat karakter dengan kode di antara 74 (alfabet latin dan sedikit tambahan) dengan membuat string yang terdiri dari mereka: 0Kan? Huruf kapital muncul pertama, lalu beberapa karakter spesial, lalu huruf kecil, dan 75 berada di dekat akhir string.Sekarang terlihat jelas kenapa 76.Karakter-karakter dibandingkan berdasarkan kode numeriknya. Kode yang lebih besar berarti karakter tersebut lebih besar. Kode untuk 77 (97) lebih besar dibandingkan dengan kode untuk 78 (90).
Algoritma yang “benar” untuk melakukan perbandingan string lebih kompleks dari kelihatannya, setiap bahasa memiliki alfabet mereka masing-masing. Jadi, browser harus tahu bahasa yang digunakan untuk perbandingan. Beruntungnya, semua browser modern (IE10- memerlukan library tambahan Intl.JS) mendukung standar internasionalisasi ECMA 402. Hal tersebut menyediakan cara spesial untuk membandingkan stringi di berbeda bahasa, mengikuti peraturan mereka. Method str.localeCompare(str2) mengembalikan sebuah interger yang menandakan apakah 4 lebih kecil, sama dengan atau lebih besar dari 83 menurut peraturan-peraturan bahasa:
Seperti contoh: 1Method ini sebenarnya menerima 2 argumen tambahan yang disebutkan di dokumentasi, yang memperbolehkan untuk menyebutkan bahasa (yang biasanya diambil dari environment, urutan huruf bergantung dari bahasa) dan menyebutkan peraturan-peraturan tambahan seperti case sensitivity atau apakah 89 and 90 dianggap sama dan seterusnya.Pengetahuan lanjutan Bagian ini membahas lebih dalam tentang bagian internal string. Pengetahuan ini akan berguna apabila Anda akan berurusan dengan emoji, simbol matematika, hieroglif, atau simbol-simbol lain yang langka. Anda dapat melewati bagian ini jika tidak berurusan dengan mereka. Semua karakter yang sering digunakan memiliki kode 2-byte. Huruf di kebanyakan negara eropa, angka, dan bahkan kebanyakan hieroglif, memiliki representasi 2-byte. Tetapi 2 byte hanya memperbolehkan 65536 kombinasi dan itu tidak cukup untuk semua kombinasi simbol. Jadi simbol-simbol yang langka menggunakan encoding dengan sepasang karakter 2-byte yang disebut “surrogate pair”. Panjang dari simbol tersebut adalah 01: 2Perlu diingat bahwa surrogate pair tidak ada pada saat Javascript dibuat, oleh karena itu fitur ini tidak diproses secara benar oleh bahasa ini! Kita sebenarnya memiliki sebuah simbol di setiap string di atas, tetapi 0 menunjukkan panjang 01. 94 dan 95 adalah beberapa method yang menangani surrogate pair dengan benar. Belum lama ini mereka muncul di bahasa ini. Sebelum mereka, hanya ada String.fromCharCode dan str.charCodeAt. Method-method tersebut sebenarnya sama saja dengan 96, tetapi tidak bisa digunakan untuk surrogate pair.Mengambil sebuah simbol terkadang agak susah, karena surrogate pair diperlakukan sebagai dua karakter: 3Perlu diingat bahwa bagian dari surrogate pair tidak memiliki arti tanpa pasangan yang lain. Jadi contoh di atas menampilkan karakter aneh. Secara teknis, surrogate pair juga dapat dideteksi berdasarkan kode mereka, jika sebuah karakter memiliki kode di antara 97, maka karakter ini adalah bagian pertama dari surrogate pair. Karakter selanjutnya (bagian kedua) harus berada di antara 98. Interval ini sudah dipesan secara khusus untuk surrogate pair oleh standar.Pada kasus diatas: 4Anda akan menemukan cara lain untuk bertanganan dengan surrogate pair nanti di bab Iterables / Bisa di iterasi. Mungkin juga ada library-library yang untuk hal tersebut, tetapi tidak ada yang cukup terkenal untuk disarankan di sini. Di banyak bahasa terdapat simbol-simbol yang terdiri dari huruf dasar dengan tanda di atas/bawahnya. Sebagai contoh, karakter 77 dapat menjadi huruf dasar untuk: 00. Kebanyakan karakter “komposit” memiliki kode mereka sendiri di tabel UTF-16. Hal tersebut tidak selalu terjadi, karena terlalu banyak kemungkinan kombinasi.Untuk mendukung komposisi yang fleksibel, UTF-16 memperbolehkan kita untuk menggunakan beberapa karakter unicode: sebuah huruf dasar yang diikuti oleh satu atau lebih karakter “tanda” yang “menghiasinya”. Sebagai contoh, jika kita memiliki 01 diikuti dengan karakter spesial “titik di atas” (kode 02), maka akan ditampilkan Ṡ. 5Jika kita memerlukan tanda tambahan di atas huruf (atau di bawahnya) – tidak masalah, tambahkan saja karakter tanda yang diperlukan. Sebagai contoh, jika kita tambahkan sebuah karakter “titik di bawah” (kode 03), maka kita akan mendapatkan “S dengan titik di atas dan di bawah”: 04.Sebagai contoh: 6Hal tersebut memberikan banyak fleksibilitas, tetapi juga masalah yang menarik: dua karakter mungkin terlihat sama, tetapi dapat direpresentasikan dengan komposisi unicode yang berbeda. Sebagai contoh: 7Untuk menyelesaikan masalah ini, terdapat sebuah algoritma “normalisasi unicode” yang membuat setiap string menjadi satu bentuk “normal”. Algoritma tersebut diimplementasikan oleh str.normalize(). 8Agak lucu bahwa di situasi kita 05 menjadikan sekumpulan karakter dengan panjang 3 menjadi satu: 06 (S dengan dua titik). 9Pada kenyataan, hal ini tidak selalu berlaku. Contoh diatas berlaku karena simbol 07 is “cukup sering digunakan”, jadi pembuat UTF-16 memasukkannya di tabel utama dan memberinya sebuah kode.Jika Anda ingin belajar lebih lanjut tentang aturan normalisasi dan variasinya – mereka dideskripsikan di appendix Unicode standard: Unicode Normalization Forms, tetapi untuk kebanyakan kasus informasi yang terdapat di bagian ini sudah cukup.
Ada beberapa metode string lain yang berguna:
String juga memiliki method-method untuk mencari/mengganti dengan ekspresi reguler (regular expression). Tetapi itu adalah topik yang luas, jadi topik ini dibahas di bagiannya sendiri Regular expressions. Apa itu Split di javascript?Split digunakan untuk membagi string menjadi array substring dan mengembalikan array baru tanpa mengubah string asli.
Apa itu substr Javascript?substr() berfungsi untuk 'mengambil' bagian string asal untuk menjadi string baru. Method ini membutuhkan 2 buah argumen: argumen pertama berupa angka yang berisi posisi awal dari string yang akan 'diambil', dan argumen kedua berisi berapa karakter yang akan diambil.
|