ในโครงการล่าสุดการตรวจสอบแบบฟอร์มต้องมีการตัดสินในช่วงเวลาเริ่มต้นและช่วงเวลา: เวลาสิ้นสุดจะต้องมากกว่าหรือเท่ากับเวลาเริ่มต้น นั่นคือปีสุดท้ายจะต้องมากกว่าปีเริ่มต้น จากนั้นสำหรับการตรวจสอบแต่ละครั้งคุณสามารถใช้ฟังก์ชั่นต่อไปนี้เพื่อเปรียบเทียบ
ฟังก์ชั่นเปรียบเทียบ (เริ่มต้นจบข้อผิดพลาด) {
VAR เริ่มต้น = PARSEINT (เริ่มต้น, 10);
var end = parseInt (end, 10);
var diff = end - เริ่มต้น;
ถ้า (diff <0) {
การแจ้งเตือน (ข้อผิดพลาด);
}อื่น{
กลับมาจริง;
-
-
ด้วยวิธีนี้เมื่อการตรวจสอบตราบใดที่ผลลัพธ์กลับมาเป็นจริงก็หมายความว่ามันผ่านไป ชอบ:
var year = เปรียบเทียบ (2001,2003, 'ปี');
var month = เปรียบเทียบ (1,2, 'เดือน');
var day = เปรียบเทียบ (12,13, 'วัน');
การแจ้งเตือน (ปี && วัน && วัน);
เปลี่ยนวันเริ่มต้นและสิ้นสุดวันที่เริ่มต้นและสิ้นสุดวันที่ด้านบน ชอบ:
var year = เปรียบเทียบ (2001,2003, 'ปี');
var month = เปรียบเทียบ (3,2, 'เดือน');
var day = เปรียบเทียบ (24,13, 'วัน');
การแจ้งเตือน (ปี && วัน && วัน);
ผลการดำเนินการจะแสดงตามลำดับ "เดือน", "วัน", "เท็จ"; จะผ่านไปแล้วข้อกำหนดเบื้องต้นสำหรับการตรวจสอบวันคือการตรวจสอบเดือนนั้นจะผ่านไปแล้ว หลังจากการวิเคราะห์อย่างระมัดระวังฉันตัดสินใจจัดเก็บพารามิเตอร์สามตัวของฟังก์ชั่นข้างต้นในโหมดเสาหินคือ:
-
เริ่มต้น: 2001,
สิ้นสุด: 2003,
ข้อผิดพลาด: "ระยะเวลาสิ้นสุดจะต้องมากกว่าระยะเวลาเริ่มต้น"
-
อย่างไรก็ตามฉันไม่ต้องการกำหนดพารามิเตอร์ของฟังก์ชั่น คำตอบคือใช่ ที่จุดเริ่มต้นของฟังก์ชั่นก่อนกำหนดจำนวนพารามิเตอร์ วิธีการประมวลผลแบบเรียกซ้ำได้อย่างไร? ฉันทำสิ่งต่อไปนี้ภายในฟังก์ชั่น:
var len = อาร์กิวเมนต์ความยาว;
ถ้า (len> 1) {
var args = array.prototype.slice.call (อาร์กิวเมนต์);
args.shift ();
-
สำหรับอาร์กิวเมนต์เราไม่สามารถโทรหาวิธี array.shift () โดยตรง แม้ว่าอาร์กิวเมนต์จะมีแอตทริบิวต์ความยาว แต่ก็ไม่ได้เป็นอาร์เรย์ดังนั้นให้ใช้เมธอดอาร์เรย์. slice () เพื่อแปลงเป็นอาร์เรย์ เกี่ยวกับข้อโต้แย้งคุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับเรื่องนี้ออนไลน์ได้ดังนั้นฉันจะไม่เข้าไปดูรายละเอียดที่นี่ เหตุใดจึงดำเนินการเฉพาะในกรณีที่เลนมากกว่า 1? เพราะเมื่อพารามิเตอร์คือ 1 ไม่จำเป็นต้องดำเนินการตรวจสอบครั้งต่อไป การประมวลผลแบบเรียกซ้ำจะดำเนินการเมื่อใด หากคุณคิดอย่างรอบคอบมันเป็นสิ่งจำเป็นเฉพาะในกรณีที่ค่าเริ่มต้นเท่ากับค่าสุดท้าย
var diff = parseint (อาร์กิวเมนต์ [0] .end, 10) - parseint (อาร์กิวเมนต์ [0] .begin, 10);
ถ้า (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 = อาร์กิวเมนต์ความยาว;
var func = อาร์กิวเมนต์ [len - 1];
ถ้า (len> 1) {
var args = array.prototype.slice.call (อาร์กิวเมนต์);
args.shift ();
-
var diff = parseint (อาร์กิวเมนต์ [0] .end, 10) - parseint (อาร์กิวเมนต์ [0] .begin, 10);
ถ้า (diff <0) {
(typeof func == 'function')?
กลับเท็จ;
} อื่นถ้า (diff == 0) {
กลับ Len> 1?
}อื่น{
กลับมาจริง;
-
-
ฟังก์ชั่นเปรียบเทียบ () {
var len = อาร์กิวเมนต์ความยาว;
ถ้า (len> 1) {
var args = array.prototype.slice.call (อาร์กิวเมนต์);
args.shift ();
-
var diff = parseint (อาร์กิวเมนต์ [0] .end, 10) - parseint (อาร์กิวเมนต์ [0] .begin, 10);
ถ้า (diff <0) {
การแจ้งเตือน (อาร์กิวเมนต์ [0] .error);
กลับเท็จ;
} อื่นถ้า (diff == 0) {
กลับ Len> 1?
}อื่น{
กลับมาจริง;
-
-