В недавнем проекте проверка формы требует суждения о начальном и конечном диапазоне времени: время окончания должно быть больше или равно временному началу. То есть: конечный год должен быть больше, чем начальный год; Затем для каждой проверки вы можете использовать следующую функцию для сравнения.
Функция сравнить (начало, конец, ошибка) {
var begin = parseint (begin, 10);
var end = parseint (end, 10);
var diff = end - начало;
if (diff <0) {
оповещение (ошибка);
}еще{
вернуть истину;
}
}
Таким образом, при проверке, до тех пор, пока результат возвращается истинно, это означает, что он проходит. нравиться:
var Year = Compare (2001 2003, 'Год');
var month = compare (1,2, 'месяц');
var day = compare (12,13, «день»);
Alert (Год && Month && Day);
Измените начальные и окончательные месяцы и стартовые и окончательные даты выше. нравиться:
var Year = Compare (2001 2003, 'Год');
var month = compare (3,2, 'месяц');
var day = compare (24,13, «день»);
предупреждение (год && month && day);
Результаты выполнения отображаются в последовательности, «Месяц», «День», «Неверно»; передается; обязательным условием для дневной проверки является то, что проверка месяца проходит. После тщательного анализа я решил сохранить три параметра вышеуказанной функции в монолитном режиме, а именно:
{
Начало: 2001,
Конец: 2003,
Ошибка: «Окончательный период должен быть больше начального периода»
}
Тем не менее, я не хочу определять параметры функции. Ответ да. В начале функции сначала определите количество параметров. Как сделать рекурсивную обработку? Я сделал следующее внутри функции:
var len = arguments.length;
if (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);
вернуть ложь;
} else if (diff == 0) {
вернуть len> 1?
}еще{
вернуть истину;
}
В приведенном выше коде Arguments.callee является самой функцией.
Функция проверки была завершена, но следует отметить, что:
Хотя количество параметров не определено, порядок параметров все еще важен, поскольку результат проверки предыдущего параметра определяет, продолжается ли проверка следующего параметра;
Второй параметр 10 функции parseint () не должен игнорироваться. Если проигнорируется, когда встречается значение, начинающееся с 0 (например, 07, 08), оно будет обработано в окттале.
Это здесь, посмотрите на примеры . Иногда мы не хотим отображать сообщения об ошибках в режиме оповещения, мы можем настроить обработчик, чтобы передать его в качестве последнего параметра. Затем, в начале функции, получите функцию обработки, например:
var func = аргументы [len - 1];
if (typeof func == 'function') {
func (аргументы [0]);
}
Итак, окончательная функция обработки такая же:
Функция Compare () {
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) {
(typeof func == 'function')?
вернуть ложь;
} else if (diff == 0) {
вернуть len> 1?
}еще{
вернуть истину;
}
}
Функция Compare () {
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?
}еще{
вернуть истину;
}
}