En un proyecto reciente, la verificación de formulario requiere un juicio sobre el rango de tiempo de inicio y finalización: el tiempo final debe ser mayor o igual a la hora de inicio. Es decir: el año final debe ser mayor que el año de inicio; Luego, para cada verificación, puede usar la siguiente función para comparar.
función compare (begin, final, error) {
var begin = parseint (begin, 10);
var end = parseInt (final, 10);
var diff = end - begin;
if (diff <0) {
alerta (error);
}demás{
devolver verdadero;
}
}
De esta manera, cuando la verificación, siempre que el resultado devuelva verdadero, significa que pasa. como:
var año = comparar (2001,2003, 'año');
var mes = comparar (1,2, 'mes');
var día = comparar (12,13, 'día');
alerta (año && mes && day);
Cambie los meses de inicio y finalización y inicie y finalice las fechas anteriores. como:
var año = comparar (2001,2003, 'año');
var mes = comparar (3,2, 'mes');
var día = comparar (24,13, 'día');
alerta (año && mes && day);
Los resultados de la ejecución se muestran en la secuencia, "mes", "día", "falso"; cuando los meses de inicio y finalización son incorrectos, no necesitamos verificar la fecha; se pasa; el requisito previo para la verificación del día es que la verificación de mes se pasa. Después de un análisis cuidadoso, decidí almacenar los tres parámetros de la función anterior en modo monolítico, a saber:
{
BEGIN: 2001,
Fin: 2003,
Error: "El período de finalización debe ser mayor que el período de inicio"
}
Sin embargo, no quiero definir los parámetros de la función. La respuesta es sí. Al comienzo de la función, primero determine el número de parámetros. ¿Cómo hacer procesamiento recursivo? Hice lo siguiente dentro de la función:
var len = argumentos.length;
if (len> 1) {
var args = array.prototype.slice.call (argumentos);
args.shift ();
}
Para los argumentos, no podemos llamar al método Array.hift () directamente. Aunque los argumentos tienen un atributo de longitud, no son una matriz después de todo, así que use el método Array.Slice () para convertirlo en una matriz. Con respecto a los argumentos, puede obtener más información sobre esto en línea, por lo que no entraré en detalles aquí. ¿Por qué se procesa solo si Len es mayor que 1? Porque cuando el parámetro es 1, no hay necesidad de realizar el siguiente paso de verificación. ¿Cuándo se realizará el procesamiento recursivo? Si lo piensa cuidadosamente, solo es necesario si el valor inicial es igual al valor final.
var diff = parseint (argumentos [0] .end, 10) - parseInt (argumentos [0] .begin, 10);
if (diff <0) {
alerta (argumentos [0] .Error);
devolver falso;
} else if (diff == 0) {
return len> 1?
}demás{
devolver verdadero;
}
En el código anterior, Arguments.callee es la función en sí.
La función de verificación se ha completado, pero debe tenerse en cuenta que:
Aunque no se determina el número de parámetros, el orden de los parámetros sigue siendo importante, porque el resultado de verificación del parámetro anterior determina si la verificación del siguiente parámetro continúa;
El segundo parámetro 10 de la función parseInt () no debe ignorarse. Si se ignora, cuando se encuentra un valor que comienza con 0 (como 07, 08), se procesará en Octal.
Está por aquí, mira los ejemplos . A veces, no queremos mostrar mensajes de error en el modo de alerta, podemos personalizar el controlador para pasarlo como el último parámetro. Luego, al comienzo de la función, obtenga la función de procesamiento, como:
var func = argumentos [len - 1];
if (typeof func == 'function') {
func (argumentos [0]);
}
Entonces, la función de procesamiento final es así:
función compare () {
var len = argumentos.length;
var func = argumentos [len - 1];
if (len> 1) {
var args = array.prototype.slice.call (argumentos);
args.shift ();
}
var diff = parseint (argumentos [0] .end, 10) - parseInt (argumentos [0] .begin, 10);
if (diff <0) {
(typeof func == 'function')?
devolver falso;
} else if (diff == 0) {
return len> 1?
}demás{
devolver verdadero;
}
}
función compare () {
var len = argumentos.length;
if (len> 1) {
var args = array.prototype.slice.call (argumentos);
args.shift ();
}
var diff = parseint (argumentos [0] .end, 10) - parseInt (argumentos [0] .begin, 10);
if (diff <0) {
alerta (argumentos [0] .Error);
devolver falso;
} else if (diff == 0) {
return len> 1?
}demás{
devolver verdadero;
}
}