최근 프로젝트에서는 양식 유효성 검사에서 시작 및 종료 시간 범위를 판단해야 했습니다. 종료 시간은 시작 시간보다 크거나 같아야 합니다. 즉, 종료 연도는 시작 연도보다 커야 하며, 시작 월과 종료 월을 비교하고, 시작 월과 종료 월도 동일하면 날짜를 비교합니다. 그런 다음 각 검증에 대해 다음 기능을 사용하여 비교할 수 있습니다.
함수 비교(시작,끝,오류){
var 시작 = parsInt(begin,10);
var end = parsInt(end,10);
var diff = 끝 - 시작;
if(차이 < 0){
경고(오류);
}또 다른{
사실을 반환;
}
}
이런 식으로 확인하는 동안 결과가 true를 반환하면 통과되었음을 의미합니다. 좋다:
var year = Compare(2001,2003,'연도');
var 월 = 비교(1,2,'월');
var day = 비교(12,13,'일');
Alert(연도 && 월 && 일); //결과는 true입니다------"true"
위에서 시작 및 종료 월과 시작 및 종료 날짜를 수정하세요. 좋다:
var year = Compare(2001,2003,'연도');
var 월 = 비교(3,2,'월');
var day = 비교(24,13,'일');
Alert(연도 && 월 && 일) /결과는 거짓입니다------"false"
실행 결과에는 "월", "일", "false"가 차례로 표시됩니다. 실제로 시작 및 종료 월이 잘못된 경우 날짜를 확인할 필요가 없습니다. 날짜 확인을 위한 전제 조건을 통과합니다. 해당 월이 확인됩니다. 주의 깊게 분석한 후 위 함수의 세 가지 매개 변수를 싱글톤 모드로 저장하기로 결정했습니다.
{
시작:2001,
끝:2003,
오류: "종료 연도는 시작 연도보다 커야 합니다."
}
그런데 함수의 매개변수를 정의하고 싶지 않습니다. 전달된 매개변수를 기반으로 함수가 자동으로 검증할 수 있나요? 대답은 '예'입니다. 함수 시작 부분에서 먼저 매개변수 수를 결정합니다. 1보다 크면 재귀 처리가 포함됩니다. 재귀적 처리는 어떻게 하나요? 함수 내에서 다음을 수행했습니다.
var len = 인수.길이;
if(len > 1){
var args = Array.prototype.slice.call(인수);
args.shift(); //첫 번째 매개변수를 제거하고 나머지 매개변수를 재귀 처리에 사용합니다.
}
인수의 경우 Array.shift() 메서드를 직접 호출할 수 없습니다. 인수에는 길이 속성이 있지만 결국 배열이 아니므로 Array.slice() 메서드를 사용하여 배열로 변환합니다. 논쟁에 관해서는 온라인에서 더 많은 정보를 얻을 수 있으며 여기서는 자세히 다루지 않겠습니다. len이 1보다 큰 경우에만 처리되는 이유는 무엇입니까? 매개변수가 1이면 다음 검증 단계를 수행할 필요가 없기 때문입니다. 재귀 처리는 언제 발생합니까? 잘 생각해보면 초기값과 최종값이 같을 때만 필요하다는 것을 이해하면 쉽게 검증 함수를 구축할 수 있습니다.
var diff =parseInt(arguments[0].end,10) -parseInt(arguments[0].begin,10);
만약(차이<0){
경고(인수[0].error);
거짓을 반환;
}그렇지 않은 경우(차이 == 0){
len > 1 ?args.callee.apply(this,args) : true;
}또 다른{
사실을 반환;
}
위 코드에서args.callee는 함수 자체입니다. Apply의 사용법에 대해서는 웹에서 관련 정보를 찾을 수 있습니다.
이 시점에서 검증 기능은 완료되었지만 다음 사항에 주의해야 합니다.
지금은 여기까지입니다. 예제를 살펴보겠습니다. 때로는 오류 정보를 경고 형식으로 표시하고 싶지 않은 경우 처리 기능을 사용자 정의하여 마지막 매개변수로 전달할 수 있습니다. 그런 다음 함수 시작 부분에서 다음과 같은 처리 함수를 가져옵니다.
var func = 인수[len - 1];
if(typeof func == '함수'){
func(인수[0]);
}
따라서 최종 처리 기능은 다음과 같습니다.
함수 비교(){
var len = 인수.길이;
var func = 인수[len - 1];
if(len > 1){
var args = Array.prototype.slice.call(인수);
args.shift(); //첫 번째 매개변수를 제거하고 나머지 매개변수를 재귀 처리에 사용합니다.
}
var diff =parseInt(arguments[0].end,10) -parseInt(arguments[0].begin,10);
만약(차이<0){
(typeof func == '함수') ? func(arguments[0].error) : Alert(arguments[0].error);
거짓을 반환;
}그렇지 않은 경우(차이 == 0){
len > 1 ?args.callee.apply(this,args) : true;
}또 다른{
사실을 반환;
}
}
함수 비교(){
var len = 인수.길이;
if(len > 1){
var args = Array.prototype.slice.call(인수);
args.shift(); //첫 번째 매개변수를 제거하고 나머지 매개변수를 재귀 처리에 사용합니다.
}
var diff =parseInt(arguments[0].end,10) -parseInt(arguments[0].begin,10);
만약(차이<0){
경고(인수[0].error);
거짓을 반환;
}그렇지 않은 경우(차이 == 0){
len > 1 ?args.callee.apply(this,args) : true;
}또 다른{
사실을 반환;
}
}