Rentetan JavaScript
Ikhtisar
Rentetan hampir di mana-mana dalam JavaScript Apabila anda memproses data input pengguna, apabila membaca Apabila mendapatkan atau menetapkan sifat DOM objek, apabila memanipulasi kuki, dan sudah tentu banyak lagi... Bahagian teras JavaScript menyediakan satu set sifat dan kaedah untuk operasi rentetan biasa, seperti membelah rentetan, menukar kes rentetan, mengendalikan subrentetan, dsb.
Kebanyakan penyemak imbas semasa juga boleh mendapat manfaat daripada kuasa ungkapan biasa, kerana ia sangat memudahkan sebilangan besar tugas manipulasi rentetan, tetapi ia juga memerlukan anda untuk mengatasi keluk pembelajaran yang agak curam. Di sini, kami memperkenalkan beberapa operasi pada rentetan itu sendiri.
Penciptaan rentetan
Terdapat beberapa cara untuk mencipta rentetan. Yang paling mudah ialah melampirkan satu set aksara dalam petikan, yang boleh diberikan kepada pembolehubah rentetan.
var myStr = "Hello, String!";
Anda boleh menggunakan petikan berganda atau petikan tunggal untuk melampirkan rentetan, tetapi ambil perhatian bahawa pasangan petikan yang mengehadkan rentetan mestilah sama dan tidak boleh dicampur.
Perisytiharan seperti var myString = "Fluffy is a pretty cat.'; adalah haram.
Membenarkan penggunaan dua jenis tanda petikan, menjadikan operasi tertentu mudah, seperti membenamkan satu ke dalam yang lain:
document.write("");
Kami mencipta beberapa rentetan dalam skrip di atas, tetapi pada dasarnya, ia bukan objek rentetan sebenar, ia adalah nilai jenis rentetan, anda boleh menggunakan pernyataan berikut : var strObj = new String("Hello, String!");
Menggunakan operator jenis, anda akan mendapati bahawa jenis myStr di atas ialah rentetan, dan strObj Jenisnya ialah objek .
Jika anda ingin mengetahui panjang rentetan, gunakan sifat panjangnya: string.length Cara mendapatkan aksara pada kedudukan rentetan yang ditentukan: string.charAt. (indeks);
Masalah:
Penyambungan dua atau lebih rentetan menjadi satu rentetan besar
Penyelesaian:
Sangat mudah, cuma Gunakan "+" untuk "menambah" dua rentetan:
var longString = "One piece " + "plus one more piece.";Untuk mengumpul berbilang rentetan ke dalam satu rentetan, anda juga boleh menggunakan operator "+=":
var result = ""; result += "My name is Anders" result += " and my age is 25";Untuk menambah aksara baris baharu pada rentetan, anda perlu untuk menggunakan aksara melarikan diri "n":
var confirmString = "You did not enter a response to the last " + "question.\n\nSubmit form anyway?";var confirmValue = confirm(confirmString);
Tetapi kaedah ini hanya boleh digunakan dalam situasi seperti kotak dialog amaran dan pengesahan Jika teks ini dipaparkan sebagai kandungan HTML, ia akan menjadi tidak sah, gunakan "
" untuk menggantikannya:
var htmlString = "First line of string. Second line of string."; document.write(htmlString);
Objek String juga menyediakan kaedah concat(), yang menjalankan fungsi yang sama seperti "+":
string.concat(value1, value2, ...)
Walau bagaimanapun, concat ( ) kaedah jelas tidak seintuitif dan ringkas seperti "+".
Mengakses subrentetan rentetan
Soalan:
Dapatkan salinan sebahagian rentetan.
Penyelesaian:
Gunakan kaedah subrentetan() atau slice() (NN4+, IE4+) Penggunaan khusus mereka diterangkan di bawah.
Prototaip subrentetan() ialah: string.substring(from, to)
Parameter pertama daripada menentukan kedudukan permulaan subrentetan dalam rentetan asal (indeks berasaskan 0 adalah pilihan); . Ia menentukan kedudukan akhir subrentetan dalam rentetan asal (indeks berasaskan 0 Secara amnya, ia harus lebih besar daripada dari, subrentetan itu akan pergi ke rentetan asal.
Apakah yang akan berlaku jika parameter daripada secara tidak sengaja lebih besar daripada parameter kepada? JavaScript akan melaraskan kedudukan permulaan dan penamat subrentetan secara automatik, iaitu subrentetan() sentiasa bermula daripada dua parameter yang lebih kecil dan berakhir dengan yang lebih besar. Walau bagaimanapun, ambil perhatian bahawa ia termasuk watak pada kedudukan permulaan, tetapi bukan watak pada kedudukan penamat. Prototaip
var fullString = "Every dog has his day."; var section = fullString.substring(0, 4); // section is "Ever". section = fullString.substring(4, 0); // section is also "Ever". section = fullString.substring(1, 1); // section is an empty string. section = fullString.substring(-2, 4); // section is "Ever", same as fullString.substring(0, 4);
slice() ialah: string.slice(start, end)
Parameter mula mewakili kedudukan permulaan subrentetan jika ia adalah a nombor negatif, maka ia boleh Difahamkan sebagai nombor dari bawah ke permulaan, contohnya -3 bermakna bermula dari yang ketiga dari bahagian bawah menunjukkan kedudukan akhir Seperti permulaan, ia juga boleh menjadi nombor negatif , dan maknanya juga menunjukkan nombor dari bawah hingga akhir. Parameter slice() boleh menjadi negatif, jadi ia lebih fleksibel daripada substring(), tetapi kurang bertolak ansur Jika permulaan lebih besar daripada akhir, ia akan mengembalikan rentetan kosong (contoh dikecualikan).
Kaedah lain ialah substr(), prototaipnya ialah: string.substr(start, length)
Daripada prototaip, anda boleh melihat maksud parameternya, mula mewakili kedudukan permulaan dan panjang mewakili panjang substring . Piawaian JavaScript tidak menggalakkan penggunaan kaedah ini.
5. Penukaran kes rentetan
Masalah:
Terdapat kotak teks pada halaman anda untuk menerima maklumat input pengguna, seperti bandar, dan kemudian anda akan melakukan pemprosesan yang berbeza mengikut bandarnya secara semula jadi digunakan pada masa ini, jadi sebelum perbandingan, adalah lebih baik untuk melakukan penukaran kes, supaya anda hanya perlu mempertimbangkan keadaan selepas penukaran atau anda perlu mengumpul data pada halaman, dan kemudian menyimpan data dalam pangkalan data, dan pangkalan data Ia berlaku untuk hanya menerima aksara besar dalam kes ini, kita semua perlu mempertimbangkan penukaran huruf besar rentetan.
Penyelesaian:
Gunakan kaedah toLowerCase() dan toUpperCase():
var city = "ShanGHai";
city = city.toLowerCase(); // bandar ialah "shanghai" sekarang.
Tentukan sama ada dua rentetan adalah sama
Masalah:
Contohnya, anda ingin membandingkan nilai input pengguna dengan rentetan yang diketahui
Penyelesaian:
Mula-mula tukar semua nilai input pengguna ke huruf besar (atau huruf kecil), dan kemudian jalankan Bandingkan:
var name = document.form1.txtUserName.value.toLowerCase();
if(name == "urname")
{
// pernyataan pergi ke sini.
}
JavaScript mempunyai dua pengendali kesamaan. Satu adalah serasi sepenuhnya ke belakang, standard "==" Jika kedua-dua jenis operan tidak konsisten, ia akan melakukan penukaran jenis secara automatik pada operan pada satu ketika Pertimbangkan pernyataan tugasan berikut:
var strA = "i love you!";
var strB = new String("i love you!");
Dua pembolehubah ini mengandungi jujukan aksara yang sama, tetapi mempunyai jenis data yang berbeza. Yang pertama ialah rentetan dan yang terakhir ialah objek Apabila menggunakan operator "==", JavaScript akan mencuba pelbagai penilaian untuk mengesan sama ada kedua-duanya akan sama dalam keadaan tertentu. Jadi ungkapan berikut dinilai kepada benar: strA == strB.
Operator kedua ialah "ketat" "===", yang tidak begitu memaafkan semasa penilaian dan tidak melakukan penukaran jenis. Jadi ungkapan strA === strB menilai palsu, walaupun kedua-dua pembolehubah memegang nilai yang sama.
Kadangkala logik kod memerlukan anda untuk menentukan sama ada dua nilai tidak sama ada juga dua pilihan di sini: "!=" dan ketat "!==" Hubungan mereka serupa dengan "= =" dan "==" =".
Perbincangan:
"==" dan "!=" akan cuba sedaya upaya untuk mencari padanan nilai semasa menilai, tetapi anda mungkin masih mahu melakukan penukaran jenis eksplisit sebelum dibandingkan dengan "membantu" Mereka menyelesaikan tugas. Sebagai contoh, jika anda ingin menentukan sama ada nilai input (rentetan) pengguna adalah sama dengan nombor, anda boleh membenarkan "==" membantu anda melengkapkan penukaran jenis:
if(document.form1.txtAge.value == someNumericVar) { .. }
Anda juga boleh menukar terlebih dahulu:
if(parseInt(document.form1.txtAge.value) == someNumericVar) { ... }
Jika anda lebih terbiasa dengan bahasa pengaturcaraan yang ditaip dengan kuat (seperti C#, Java, dll.), maka anda boleh meneruskan tabiat anda (penukaran jenis) di sini, yang juga akan meningkatkan kebolehbacaan program.
Terdapat satu perkara yang perlu anda perhatikan, iaitu tetapan serantau komputer. Jika anda menggunakan "<" dan ">" untuk membandingkan rentetan, maka JavaScript membandingkannya sebagai Unicode, tetapi jelas orang yang melayari web tidak membaca teks sebagai Unicode :) Contohnya dalam bahasa Sepanyol, Menurut pengisihan tradisional, "ch " akan diisih sebagai aksara antara "c" dan "d". localeCompare() menyediakan cara untuk menggunakan pengumpulan aksara tempat lalai.
rentetan var; // Tatasusunan rentetan yang hendak diisih, dengan mengandaikan ia telah dimulakan
strings.sort(function(a,b) { return a.localeCompare(b) }); // Panggil kaedah sort() untuk mengisih
Carian rentetan
Soalan:
Tentukan sama ada rentetan mengandungi rentetan lain.
Penyelesaian:
Gunakan kaedah indexOf() rentetan:
strObj.indexOf(subString[, startIndex])
strObj ialah rentetan yang akan dinilai, subString ialah subrentetan yang ditemui dalam strObj String, startIndex adalah pilihan, menunjukkan kedudukan permulaan carian (indeks berasaskan 0), jika startIndex ditinggalkan, cari dari permulaan strObj, jika startIndex kurang daripada 0, kemudian mulakan dari 0, jika startIndex lebih besar daripada indeks maksimum, kemudian cari dari Mula pada indeks maksimum.
indexOf() mengembalikan kedudukan permulaan subString dalam strObj, jika tidak dijumpai, mengembalikan -1. Dalam skrip, anda boleh menggunakannya seperti ini:
if(largeString.indexOf(shortString) != -1)
{
// Jika disertakan, kendalikannya dengan sewajarnya;
Panjang rentetan
Anda boleh menggunakan panjang sifat terbina dalam untuk mengira panjang rentetan:var txt = "Hello World!"; document.write("" + txt.length + ""); var txt="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; document.write("" + txt.length + "");bahagian seterusnya