definisi
String adalah nol atau lebih karakter yang disusun bersama, ditempatkan dalam kutipan tunggal atau ganda.
'ABC' "ABC"Kutipan ganda dapat digunakan di dalam satu string kutipan. Di dalam string kutipan ganda, kutipan tunggal dapat digunakan.
'key = "value"' "Ini perjalanan panjang"
Keduanya di atas adalah string hukum.
Jika Anda ingin menggunakan kutipan tunggal di dalam string kutipan tunggal (atau kutipan ganda di dalam string kutipan ganda), Anda harus mengawali kutipan tunggal (atau kutipan ganda) di dalamnya untuk melarikan diri.
'Apakah dia mengatakan/' Halo/'?' // "Apakah dia mengatakan 'halo'?" "Apakah dia mengatakan/" halo/"?" // "Apakah dia mengatakan" halo "?"
Karena nilai atribut bahasa HTML menggunakan kutipan ganda, banyak proyek sepakat bahwa string bahasa JavaScript hanya menggunakan kutipan tunggal, dan tutorial ini mengikuti konvensi ini. Tentu saja, juga sempurna untuk menggunakan kutipan ganda saja. Penting untuk tetap pada satu gaya dan tidak mencampur dua gaya.
Secara default, string hanya dapat ditulis dalam satu baris, dan jika mereka dibagi menjadi beberapa baris, mereka akan melaporkan kesalahan.
'ABC' // Sintakserror: Token Tidak Terduga Ilegal
Kode di atas membagi string menjadi tiga baris, dan JavaScript akan melaporkan kesalahan.
Jika string panjang harus dibagi menjadi beberapa baris, backslash dapat digunakan di akhir setiap baris.
var longstring = "long /long /long /string"; longstring // "string panjang panjang"
Kode di atas menunjukkan bahwa setelah menambahkan backslash, string yang awalnya ditulis pada satu baris dapat dibagi menjadi beberapa baris penulisan. Namun, ketika mengeluarkan, efeknya masih satu baris, dan efeknya persis sama dengan menulis pada baris yang sama. Perhatikan bahwa backslash harus diikuti oleh karakter baru, dan tidak boleh ada karakter lain (seperti spasi), jika tidak kesalahan akan dilaporkan.
Operator gabungan (+) dapat menggabungkan beberapa string baris tunggal, membagi string panjang menjadi beberapa baris untuk ditulis, dan juga merupakan baris tunggal saat output.
var longstring = 'long' + 'long' + 'long' + 'string';
Jika Anda ingin mengeluarkan string multi-line, ada solusi untuk memanfaatkan komentar multi-line.
(function () {/*line 1line 2line 3*/}). tostring (). split ('/n'). Slice (1, -1) .join ('/n') // "baris 1 // baris 2 // baris 3"Dalam contoh di atas, string output adalah beberapa baris.
Melarikan diri
Backslash (/) memiliki makna khusus dalam string dan digunakan untuk mewakili beberapa karakter khusus, sehingga juga disebut karakter pelarian.
Karakter khusus yang perlu diloloskan dengan backslash terutama sebagai berikut:
Karakter di atas didahului oleh backslash, yang semuanya mewakili makna khusus.
Console.log ('1/n2') // 1 // 2Dalam kode di atas, /n berarti baris baru, dan dibagi menjadi dua baris saat mengeluarkan.
Ada tiga kegunaan khusus untuk backslash.
(1)/hhhh
Backslash diikuti oleh tiga angka oktal (000 hingga 377), mewakili karakter. HHH sesuai dengan titik kode unicode dari karakter yang sesuai, seperti /251 mewakili simbol hak cipta. Jelas, metode ini hanya dapat menghasilkan 256 karakter.
(2)/xhh
/X diikuti oleh dua bilangan heksadesimal (00 hingga FF), mewakili karakter. HH sesuai dengan titik kode unicode dari karakter, seperti /xa9 mewakili simbol hak cipta. Metode ini hanya dapat menghasilkan 256 karakter.
(3)/uxxxxx
/U diikuti oleh empat bilangan heksadesimal (0000 ke FFFFF), mewakili karakter. HHHHH sesuai dengan titik kode unicode dari karakter, seperti /U00A9 mewakili simbol hak cipta.
Di bawah ini adalah contoh dari tiga karakter khusus yang ditulis secara rinci.
'/251' // "©" '/xa9' // "©" '/u00a9' // "©" '/172' === 'z' // true '/x7a' === 'z' // true '/u007a' === 'z' // Benar
Jika backslash digunakan sebelum karakter non-spesifik, backslash dihilangkan.
'/A A"
Dalam kode di atas, A adalah karakter normal, dan tidak ada makna khusus untuk menambahkan backslash sebelumnya, dan backslash akan secara otomatis dihilangkan.
Jika backslash perlu dimasukkan dalam konten normal string, maka backslash lain perlu ditambahkan sebelum backslash untuk melarikan diri.
"Prev // Next" // "Prev/ Next"
String dan array
Sebuah string dapat diperlakukan sebagai array karakter, sehingga operator braket kuadrat dari array dapat digunakan untuk mengembalikan karakter pada posisi tertentu (nomor posisi dimulai pada 0).
var s = 'hello'; s [0] // "h" s [1] // "e" s [4] // "o" // Gunakan operator braket persegi 'halo' [1] // "e"
Jika angka dalam kurung persegi melebihi panjang string, atau jika angka dalam kurung persegi tidak sama sekali, tidak ditentukan dikembalikan.
'ABC' [3] // tidak terdefinisi'abc '[-1] // tidak terdefinisi'abc' ['x'] // tidak terdefinisi
Namun, itu semua tentang kesamaan antara string dan array. Bahkan, tidak mungkin untuk mengubah satu karakter dalam string.
var s = 'halo'; hapus s [0]; s // "halo" s [1] = 'a'; s // "halo" s [5] = '!'; s // "halo"
Kode di atas menunjukkan bahwa karakter individu di dalam string tidak dapat diubah atau ditambahkan atau dihapus, dan operasi ini akan gagal secara diam -diam.
Alasan mengapa string mirip dengan array karakter sebenarnya karena ketika melakukan operasi braket persegi pada string, string akan secara otomatis dikonversi menjadi objek string.
atribut panjang
Atribut panjang mengembalikan panjang string, yang tidak dapat diubah.
var s = 'hello'; s.length // 5s.length = 3; s.length // 5s.length = 7; s.length // 5
Kode di atas menunjukkan bahwa atribut panjang string tidak dapat diubah, tetapi tidak akan ada kesalahan.
Set karakter
JavaScript menggunakan set karakter Unicode, yang berarti bahwa dalam JavaScript, semua karakter diwakili oleh Unicode.
JavaScript tidak hanya menggunakan Unicode untuk menyimpan karakter secara internal, tetapi Unicode juga dapat digunakan secara langsung dalam program. Semua karakter dapat ditulis dalam bentuk "/uxxxx", di mana xxxx mewakili pengkodean unicode dari karakter. Misalnya, /U00A9 mewakili simbol hak cipta.
var s = '/u00a9'; s // "©"
Setiap karakter disimpan dalam format 16-bit (mis. 2 byte) UTF-16 di dalam JavaScript. Dengan kata lain, panjang karakter unit JavaScript ditetapkan dengan panjang 16-bit, yaitu, 2 byte.
Namun, UTF-16 memiliki dua panjang: untuk karakter antara U+0000 dan U+FFFF, panjangnya 16 bit (mis. 2 byte); Untuk karakter antara U+10000 dan U+10FFFF, panjangnya adalah 32 bit (mis. 4 byte), dan dua byte pertama adalah antara 0xD800 dan 0XDBFF, dan dua byte terakhir adalah antara 0xDC00 dan 0XDFFF. Misalnya, karakter yang sesuai dari U+1D306 adalah ?, dan ditulis sebagai UTF-16, yaitu 0xD834 0xDF06. Browser akan dengan benar mengenali keempat byte ini sebagai satu karakter, tetapi panjang karakter di dalam JavaScript selalu ditetapkan hingga 16 bit, dan keempat byte ini akan diperlakukan sebagai dua karakter.
var s = '/ud834/udf06'; s // "?" s.length // 2 /^.$/. Tes (s) // falseses.charat (0) // "" s.charat (1) // "" s.charcodeat (0) // 55348s.charcodeat (1) // 5709
Kode di atas menunjukkan bahwa untuk karakter antara U+10000 dan U+10FFFF, JavaScript selalu diperlakukan sebagai dua karakter (atribut panjang karakter adalah 2). Ekspresi reguler yang digunakan untuk mencocokkan satu karakter akan gagal (JavaScript percaya bahwa lebih dari satu karakter ada di sini), metode ChARAT tidak dapat mengembalikan satu karakter, dan metode charcodeat mengembalikan nilai desimal yang sesuai dengan setiap byte.
Karena itu, ketika berhadapan dengan ini, ini harus diperhitungkan. Untuk 4 byte karakter unicode, dengan asumsi bahwa C adalah nomor unicode dari karakter, h adalah dua byte pertama, dan L adalah dua byte terakhir, hubungan konversi di antara mereka adalah sebagai berikut.
// Convert characters larger than U+FFFFFF from Unicode to UTF-16H = Math.floor((C - 0x10000) / 0x400) + 0xD800L = (C - 0x10000) % 0x400 + 0xDC00// Convert characters larger than U+FFFFF from UTF-16 to UnicodeC = (H - 0xD800) * 0x400 + L - 0xDC00 + 0x10000
Ekspresi reguler berikut dapat mengenali semua karakter UTF-16.
([/0-/ud7ff/ue000-/ufff] | [/ud800-/udbff] [/udc00-/udff])
Karena mesin JavaScript (secara ketat, spesifikasi ES5) tidak dapat secara otomatis mengenali karakter unicode dari bidang tambahan (angka lebih besar dari 0xFFFF), semua fungsi pemrosesan string akan menghasilkan hasil yang salah ketika menghadapi karakter tersebut. Jika Anda ingin menyelesaikan operasi terkait string, Anda harus menentukan apakah karakter termasuk dalam kisaran 0xD800 hingga 0XDFFF.
Di bawah ini adalah fungsi yang dapat menangani traversal string dengan benar.
fungsi getSymbols (string) {var length = string.length; indeks var = -1; output var = []; karakter var; var charcode; while (++ index <panjang) {karakter = string.charat (index); charcode = karakter.charcodeat (0); if (charcode> = 0xd800 && charcode <= 0xdbff) {output.push (karakter+string.charat (++ index)); } else {output.push (karakter); }} return output;} simbol var = getSymbols ('?'); simbols.foreach (function (simbol) {// ...});Operasi string lainnya seperti penggantian (String.Prototype.replace), intercept substring (string.prototype.substring, String.prototype.slice) harus ditangani dengan cara yang sama.
BASE64 Transcoding
Base64 adalah metode pengkodean yang dapat mengubah karakter apa pun menjadi karakter yang dapat dicetak. Metode pengkodean ini terutama digunakan untuk tidak mengenkripsi, tetapi untuk menghindari karakter khusus, dan menyederhanakan pemrosesan program.
Javascript secara asli menyediakan dua metode terkait base64.
var string = 'hello world!'; btoa (string) // "sgvsbg8gv29ybgqh" atob ('sgvsbg8gv29ybgqh') // "hello world!" Kedua metode ini tidak cocok untuk karakter non-ASCII dan akan melaporkan kesalahan. BTOA ('Hello') // Domexception Uncaught: String yang akan dikodekan berisi karakter di luar rentang Latin1. Untuk mengonversi karakter non-ASCII ke pengkodean Base64, tautan transkode harus dimasukkan di tengah, dan kemudian kedua metode ini digunakan. fungsi b64encode (str) {return btoa (encodeuricomponent (str));} function b64decode (str) {return decodeuricomponent (atob (str));} b64encode ('hello') // "juu0Juewjuu1ju1juje" b64decode (juu0Juewjuu1ju1ju "b64decode (juu0juewjuu1ju1ju" b64decode (juuJuewJuU1Juju ('b64decoJuuU1JuJe (' B64DEJUUDUU1 ('B64DUJUUDUU1 " "Halo"