Dalam proyek baru -baru ini, verifikasi formulir memerlukan penilaian pada kisaran awal dan akhir waktu: waktu akhir harus lebih besar dari atau sama dengan waktu mulai. Artinya: tahun akhir harus lebih besar dari tahun awal; Kemudian, untuk setiap verifikasi, Anda dapat menggunakan fungsi berikut untuk membandingkan.
function compare (begin, end, error) {
var begin = parseInt (begin, 10);
var end = parseInt (end, 10);
var diff = end - begin;
if (diff <0) {
peringatan (kesalahan);
}kalau tidak{
Kembali Benar;
}
}
Dengan cara ini, ketika verifikasi, selama hasilnya kembali benar, itu berarti lewat. menyukai:
var tahun = bandingkan (2001.2003, 'tahun');
var bulan = bandingkan (1,2, 'bulan');
var day = bandingkan (12,13, 'hari');
Peringatan (tahun && Bulan && hari); // Hasilnya benar ------- "Benar"
Ubah bulan -bulan awal dan akhir dan mulai dan akhir tanggal di atas. menyukai:
var tahun = bandingkan (2001.2003, 'tahun');
var bulan = Bandingkan (3,2, 'bulan');
var day = bandingkan (24,13, 'hari');
peringatan (tahun && Bulan && hari); /hasilnya salah ------ "Salah"
Hasil eksekusi ditampilkan secara berurutan, "bulan", "hari", "false"; disahkan; prasyarat untuk verifikasi hari adalah bahwa verifikasi bulan dilewati. Setelah analisis yang cermat, saya memutuskan untuk menyimpan tiga parameter fungsi di atas dalam mode monolitik, yaitu:
{
Mulai: 2001,
Akhir: 2003,
Kesalahan: "Periode akhir harus lebih besar dari periode awal"
}
Namun, saya tidak ingin mendefinisikan parameter fungsi. Jawabannya adalah ya. Pada awal fungsi, pertama -tama tentukan jumlah parameter. Bagaimana cara melakukan pemrosesan rekursif? Saya melakukan yang berikut di dalam fungsi:
var len = argumen.length;
if (len> 1) {
var args = array.prototype.slice.call (argumen);
args.shift (); // hapus parameter pertama, dan sisanya digunakan sebagai parameter pemrosesan rekursif
}
Untuk argumen, kami tidak dapat memanggil metode array.shift () secara langsung. Meskipun argumen memiliki atribut panjang, mereka bukan array, jadi gunakan metode array.slice () untuk mengubahnya menjadi array. Mengenai argumen, Anda dapat mempelajari lebih lanjut tentang itu secara online, jadi saya tidak akan membahas detailnya di sini. Mengapa diproses hanya jika Len lebih besar dari 1? Karena ketika parameternya adalah 1, tidak perlu melakukan langkah verifikasi berikutnya. Kapan pemrosesan rekursif akan dilakukan? Jika Anda memikirkannya dengan hati -hati, hanya perlu jika nilai awal sama dengan nilai akhir.
var diff = parseInt (argumen [0] .end, 10) - parseInt (argumen [0] .begin, 10);
if (diff <0) {
peringatan (argumen [0] .Error);
mengembalikan false;
} lain jika (diff == 0) {
return len> 1?
}kalau tidak{
Kembali Benar;
}
Dalam kode di atas, Arguments.Callee adalah fungsi itu sendiri.
Fungsi verifikasi telah selesai, tetapi harus dicatat bahwa:
Meskipun jumlah parameter tidak ditentukan, urutan parameter masih penting, karena hasil verifikasi dari parameter sebelumnya menentukan apakah verifikasi parameter berikutnya berlanjut;
Parameter kedua 10 dari fungsi parseInt () tidak boleh diabaikan. Jika diabaikan, ketika nilai dimulai dengan 0 (seperti 07, 08) ditemui, itu akan diproses dalam oktal.
Di sini, lihat contoh -contohnya . Terkadang, kami tidak ingin menampilkan pesan kesalahan dalam mode peringatan, kami dapat menyesuaikan pawang untuk meneruskannya sebagai parameter terakhir. Kemudian di awal fungsi, dapatkan fungsi pemrosesan, seperti:
var func = argumen [len - 1];
if (typeof func == 'function') {
func (argumen [0]);
}
Jadi, fungsi pemrosesan akhir adalah seperti ini:
function compare () {
var len = argumen.length;
var func = argumen [len - 1];
if (len> 1) {
var args = array.prototype.slice.call (argumen);
args.shift (); // hapus parameter pertama, dan sisanya digunakan sebagai parameter pemrosesan rekursif
}
var diff = parseInt (argumen [0] .end, 10) - parseInt (argumen [0] .begin, 10);
if (diff <0) {
(TypeOf func == 'function')?
mengembalikan false;
} lain jika (diff == 0) {
return len> 1?
}kalau tidak{
Kembali Benar;
}
}
function compare () {
var len = argumen.length;
if (len> 1) {
var args = array.prototype.slice.call (argumen);
args.shift (); // hapus parameter pertama, dan sisanya digunakan sebagai parameter pemrosesan rekursif
}
var diff = parseInt (argumen [0] .end, 10) - parseInt (argumen [0] .begin, 10);
if (diff <0) {
peringatan (argumen [0] .Error);
mengembalikan false;
} lain jika (diff == 0) {
return len> 1?
}kalau tidak{
Kembali Benar;
}
}