최근 프로젝트에서 양식 검증에는 시작 및 종료 시간에 대한 판단이 필요합니다. 종료 시간은 시작 시간보다 크거나 동일해야합니다. 즉, 시작 연도가 동일하다면 시작의 달을 비교하면 날짜를 비교하십시오. 그런 다음 각 확인에 대해 다음 기능을 사용하여 비교할 수 있습니다.
함수 비교 (시작, 끝, 오류) {
var begin = parseint (시작, 10);
var end = parseint (끝, 10);
var diff = end- 시작;
if (diff <0) {
경고 (오류);
}또 다른{
진실을 반환하십시오.
}
}
이런 식으로, 결과가 사실이 반환되는 한, 그것은 통과한다는 것을 의미합니다. 좋다:
var 년 = 비교 (2001,2003, '연도');
var month = 비교 (1,2, 'month');
var day = 비교 (12,13, 'day');
Alert (Year && Month && day);
시작 및 끝 달을 변경하고 위의 시작 및 종료 날짜. 좋다:
var 년 = 비교 (2001,2003, '연도');
var month = 비교 (3,2, '달');
var day = 비교 (24,13, 'day');
Alert (Year && Month && day);
실행 결과는 "Month", "Day", "False"로 표시됩니다 통과됩니다. 하루 검증을위한 전제 조건은 월 확인이 통과된다는 것입니다. 신중한 분석 후, 나는 위 함수의 세 가지 매개 변수를 모 놀리 식 모드에 저장하기로 결정했습니다.
{
시작 : 2001,
끝 : 2003,
오류 : "종료 기간은 시작 기간보다 커야합니다"
}
그러나 함수의 매개 변수를 정의하고 싶지 않습니다. 대답은 예입니다. 함수의 시작 부분에서 먼저 매개 변수 수를 결정하십시오. 재귀 처리 방법은 무엇입니까? 기능 내에서 다음을 수행했습니다.
var len = arguments.length;
if (len> 1) {
var args = array.prototype.slice.call (인수);
args.shift (); // 첫 번째 매개 변수를 제거하고 나머지는 재귀 처리 매개 변수로 사용됩니다.
}
인수의 경우 array.shift () 메소드를 직접 호출 할 수 없습니다. 인수는 길이 속성을 가지지 만 결국 배열이 아니므로 Array.slice () 메소드를 사용하여 배열로 변환하십시오. 논쟁과 관련하여 온라인으로 그것에 대해 더 많이 배울 수 있으므로 여기에서 자세히 설명하지 않을 것입니다. Len이 1보다 큰 경우에만 처리되는 이유는 무엇입니까? 매개 변수가 1 인 경우 다음 확인 단계를 수행 할 필요가 없습니다. 재귀 처리는 언제 수행됩니까? 당신이 그것에 대해 신중하게 생각하면, 초기 값이 최종 값과 같으면, 우리가 우리의 검증 기능을 구축하기가 쉽습니다.
var diff = parseint (인수 [0] .end, 10) - parseint (인수 [0] .Begin, 10);
if (diff <0) {
경고 (인수 [0] .Error);
거짓을 반환합니다.
} else if (diff == 0) {
반환 len> 1? callee.apply (this, args) : true;
}또 다른{
진실을 반환하십시오.
}
위의 코드에서는 arguments.callee가 기능 자체를 사용하여 관련 정보를 찾을 수 있습니다.
검증 함수가 완료되었지만 다음과 같이 언급해야합니다.
매개 변수의 수는 결정되지 않지만, 이전 매개 변수의 검증 결과가 다음 매개 변수의 검증이 계속되는지 여부를 결정하기 때문에 매개 변수 순서는 여전히 중요합니다.
parseint () 함수의 두 번째 매개 변수 10을 무시해서는 안됩니다. 무시되면 0으로 시작하는 값 (예 : 07, 08)이 발생하면 8 대에서 처리됩니다.
여기에 있습니다. 예를 보십시오. 때로는 경고 모드에 오류 메시지를 표시하지 않으려면 핸들러를 사용자 정의하여 마지막 매개 변수로 전달할 수 있습니다. 그런 다음 함수의 시작 부분에서 다음과 같은 처리 기능을 가져옵니다.
var func = 인수 [len -1];
if (typeof func == 'function') {
func (인수 [0]);
}
따라서 최종 처리 기능은 다음과 같습니다.
함수 비교 () {
var len = arguments.length;
var func = 인수 [len -1];
if (len> 1) {
var args = array.prototype.slice.call (인수);
args.shift (); // 첫 번째 매개 변수를 제거하고 나머지는 재귀 처리 매개 변수로 사용됩니다.
}
var diff = parseint (인수 [0] .end, 10) - parseint (인수 [0] .Begin, 10);
if (diff <0) {
(func == 'function')?
거짓을 반환합니다.
} else if (diff == 0) {
반환 len> 1? callee.apply (this, args) : true;
}또 다른{
진실을 반환하십시오.
}
}
함수 비교 () {
var len = arguments.length;
if (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);
거짓을 반환합니다.
} else if (diff == 0) {
반환 len> 1? callee.apply (this, args) : true;
}또 다른{
진실을 반환하십시오.
}
}