في مشروع حديث ، يتطلب التحقق من النماذج حكمًا على نطاق البداية ونهاية الوقت: يجب أن يكون وقت النهاية أكبر من وقت البدء أو يساوي. هذا هو: يجب أن تكون السنة النهائية أكبر من سنة البداية ؛ ثم ، لكل التحقق ، يمكنك استخدام الوظيفة التالية للمقارنة.
دالة مقارنة (تبدأ ، نهاية ، خطأ) {
var begin = parseint (start ، 10) ؛
var end = parseint (end ، 10) ؛
var diff = end - start ؛
if (diff <0) {
تنبيه (خطأ) ؛
}آخر{
العودة صحيح.
}
}
وبهذه الطريقة ، عند التحقق ، طالما أن النتيجة ترجع إلى حد ما ، فهذا يعني أنه يمر. يحب:
VAR YEAR = COMPARE (2001،2003 ، 'Year') ؛
var month = compare (1،2 ، 'month') ؛
var day = compare (12،13 ، 'day') ؛
ALERT (year && month && day) ؛
قم بتغيير أشهر البداية والنهاية وتواريخ البدء والنهاية أعلاه. يحب:
VAR YEAR = COMPARE (2001،2003 ، 'Year') ؛
var month = مقارنة (3،2 ، "الشهر") ؛
var day = مقارنة (24،13 ، 'اليوم') ؛
ALERT (Year && month && day) ؛
يتم عرض نتائج التنفيذ بالتسلسل ، "الشهر" ، "False" ؛ تم تمريره ؛ المتطلب السابق للتحقق من اليوم هو أن التحقق من الشهر قد تم تمريره. بعد التحليل الدقيق ، قررت تخزين المعلمات الثلاثة للوظيفة أعلاه في وضع متجانس ، أي:
{
ابدأ: 2001 ،
النهاية: 2003 ،
خطأ: "يجب أن تكون فترة النهاية أكبر من فترة البداية"
}
ومع ذلك ، لا أريد تحديد معلمات الوظيفة. الجواب نعم. في بداية الوظيفة ، حدد أولاً عدد المعلمات. كيف تفعل المعالجة العودية؟ فعلت ما يلي داخل الوظيفة:
var len = ediuments.length ؛
إذا (len> 1) {
var args = array.prototype.slice.call (وسيطات) ؛
args.shift () ؛
}
بالنسبة للوسائط ، لا يمكننا استدعاء طريقة Array.Shift () مباشرة. على الرغم من أن الوسائط لها سمة طول ، إلا أنها ليست صفيفًا بعد كل شيء ، لذا استخدم طريقة Array.slice () لتحويلها إلى صفيف. فيما يتعلق بالحجج ، يمكنك معرفة المزيد عنها عبر الإنترنت ، لذلك لن أخوض في التفاصيل هنا. لماذا تتم معالجتها فقط إذا كان لين أكبر من 1؟ لأنه عندما تكون المعلمة 1 ، ليست هناك حاجة لإجراء خطوة التحقق التالية. متى سيتم إجراء المعالجة العودية؟ إذا كنت تفكر في الأمر بعناية ، فمن الضروري فقط إذا كانت القيمة الأولية تساوي القيمة النهائية.
var diff = parseint (الوسائط [0] .end ، 10) - parseint (الوسائط [0] .begin ، 10) ؛
if (diff <0) {
تنبيه (الحجج [0] .error) ؛
العودة كاذبة
} آخر إذا (diff == 0) {
إرجاع Len> 1؟
}آخر{
العودة صحيح.
}
في الكود أعلاه ، فإن الوسيطات. Callee هي الوظيفة نفسها.
تم الانتهاء من وظيفة التحقق ، ولكن تجدر الإشارة إلى:
على الرغم من عدم تحديد عدد المعلمات ، إلا أن ترتيب المعلمات لا يزال مهمًا ، لأن نتيجة التحقق من المعلمة السابقة تحدد ما إذا كان التحقق من المعلمة التالية مستمرة ؛
لا ينبغي تجاهل المعلمة الثانية 10 من وظيفة parseint (). إذا تم تجاهلها ، عند مواجهة قيمة تبدأ بـ 0 (مثل 07 ، 08) ، فسيتم معالجتها في الثمن.
لقد انتهى هنا ، انظر إلى الأمثلة . في بعض الأحيان ، لا نريد عرض رسائل الخطأ في وضع التنبيه ، يمكننا تخصيص المعالج لتمريره كمعلمة الأخيرة. ثم في بداية الوظيفة ، احصل على وظيفة المعالجة ، مثل:
var func = وسيطات [len - 1] ؛
if (typeof func == 'function') {
func (الحجج [0]) ؛
}
لذا ، فإن وظيفة المعالجة النهائية مثل هذا:
وظيفة مقارنة () {
var len = ediuments.length ؛
var func = وسيطات [len - 1] ؛
إذا (len> 1) {
var args = array.prototype.slice.call (وسيطات) ؛
args.shift () ؛
}
var diff = parseint (الوسائط [0] .end ، 10) - parseint (الوسائط [0] .begin ، 10) ؛
if (diff <0) {
(typeof func == 'function')؟
العودة كاذبة
} آخر إذا (diff == 0) {
إرجاع Len> 1؟
}آخر{
العودة صحيح.
}
}
وظيفة مقارنة () {
var len = ediuments.length ؛
إذا (len> 1) {
var args = array.prototype.slice.call (وسيطات) ؛
args.shift () ؛
}
var diff = parseint (الوسائط [0] .end ، 10) - parseint (وسيطات [0] .begin ، 10) ؛
if (diff <0) {
تنبيه (الحجج [0] .error) ؛
العودة كاذبة
} آخر إذا (diff == 0) {
Return Len> 1؟
}آخر{
العودة صحيح.
}
}