В недавнем проекте проверка формы требовала оценки начального и конечного диапазона времени: время окончания должно быть больше или равно времени начала. То есть: год окончания должен быть больше года начала; если они равны, сравниваем месяц начала и месяц окончания, если месяцы начала и окончания тоже равны, сравниваем даты. Затем для каждой проверки вы можете использовать следующую функцию для сравнения.
функция сравнения (начало, конец, ошибка) {
вар начало = parseInt (начало, 10);
вар конец = parseInt(конец,10);
вар diff = конец - начало;
если(разница <0){
предупреждение (ошибка);
}еще{
вернуть истину;
}
}
Таким образом, если во время проверки результат возвращает true, это означает, что он пройден. нравиться:
вар год = сравнить (2001,2003, «год»);
вар месяц = сравнить (1,2, «месяц»);
вар день = сравнить (12,13, «день»);
alert(год && месяц && день); //Результат верен ------"истина";
Измените начальный и конечный месяцы, а также даты начала и окончания, указанные выше. нравиться:
вар год = сравнить (2001,2003, «год»);
вар месяц = сравнить (3,2, «месяц»);
вар день = сравнить (24,13, «день»);
alert(год && месяц && день); /Результат ложный ------"ложь"
Результат выполнения последовательно отображает «месяц», «день» и «ложь»; фактически, если начальный и конечный месяцы неверны, нам не нужно проверять дату, обязательным условием для проверки месяца является проверка года; проходит обязательное условие для проверки дня. Месяц проверен. После тщательного анализа я решил сохранить три параметра приведенной выше функции в одноэлементном режиме, а именно:
{
начало:2001,
конец:2003,
ошибка: «Год окончания должен быть больше года начала»
}
Однако я не хочу определять параметры функции. Может ли функция автоматически проверяться на основе переданных параметров? Ответ: да. В начале функции сначала определите количество параметров. Если оно больше 1, значит, выполняется рекурсивная обработка. Как выполнить рекурсивную обработку? Внутри функции я сделал следующее:
вар лен = аргументы.длина;
если(длин > 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]. ошибка);
вернуть ложь;
}иначе если(разница == 0){
вернуть len > 1 аргументы.callee.apply(this,args) : true;
}еще{
вернуть истину;
}
В приведенном выше коде аргументы.callee — это сама функция. Что касается использования apply, вы можете найти соответствующую информацию в Интернете.
На этом функция проверки завершена, но вам необходимо обратить внимание на следующее:
На этом пока всё, давайте посмотрим на примеры . Иногда мы не хотим отображать информацию об ошибке в виде предупреждения. Мы можем настроить функцию обработки и передать ее в качестве последнего параметра. Затем в начале функции получите функцию обработки, например:
вар func = аргументы [len - 1];
if(typeof func == 'функция'){
функция (аргументы [0]);
}
Итак, конечная функция обработки выглядит так:
функция сравнения(){
вар лен = аргументы.длина;
вар func = аргументы [len - 1];
если(длин > 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 аргументы.callee.apply(this,args) : true;
}еще{
вернуть истину;
}
}
функция сравнения(){
вар лен = аргументы.длина;
если(длин > 1){
var args = Array.prototype.slice.call(аргументы);
args.shift(); //Удаляем первый параметр и используем оставшиеся параметры для рекурсивной обработки
}
var diff = parseInt(arguments[0].end,10) - parseInt(arguments[0].begin,10);
если (разница <0) {
предупреждение (аргументы [0]. ошибка);
вернуть ложь;
}иначе если(разница == 0){
вернуть len > 1 аргументы.callee.apply(this,args) : true;
}еще{
вернуть истину;
}
}