La detección de errores (1) ------ sentencia try-catch De "Elevación 3"

0 Introducción

Actualmente leer la sección de detección de errores "Elevación 3", ahora cavar un hoyo en la detección de errores debe escribir tres Resumen: detección de errores quemador, y la información de salida; interceptación de errores try-catch; tipo común de error.

ideas lógicas Benpian son los siguientes: declaración Primera try-catch llevó a introducir la captura de errores; a continuación, describe los tipos comunes de errores, que se combinarán con firebug para ilustrar el punto, en segundo lugar try-catch declaración y tipo de error combinación a errores de captura, sin embargo, si son capturados el error a la representación de idioma del navegador, o difícil de encontrar el error, se recomienda el uso de error desarrollador definidos tiro tiro, por lo que la ubicación y la causa del error serán más fáciles de encontrar, y finalmente lanza y los errores de captura de errores eran resumiendo la discusión.

1 try-catch Perfil

Buen mecanismo que permite a los usuarios y desarrolladores de recordatorio oportuno, sabiendo que al final lo que sucedió, así que no cunda el pánico de gestión de errores. ECMA-262 3ª edición comunicado introducido try-catch, como JavaScript en una forma estándar para manejar excepciones. La sintaxis básica es la siguiente,

try{
// 可能会导致错误的代码
} catch(error){
// 在错误发生时怎么处理
}

Debemos poner todo el código de error puede tiro se coloca en el bloque try, y poner ese código para manejar en el bloque catch error. Si se produce cualquier código de error en el bloque try, sino que terminará de inmediato la ejecución de código, y luego ejecutar el bloque catch. En este momento, coger un bloque que contiene el objeto recibirá un mensaje de error. Incluso si usted no desea utilizar el objeto de error, sino también especificar un nombre de parámetro. Este objeto contiene la información real variará dependiendo del navegador, pero hay un mensaje de error común que mantiene las propiedades del mensaje. El atributo del mensaje es la otra información relevante único capaz de garantizar que todos los navegadores soportan la propiedad, además, IE, Firefox, Safari, Chrome y Opera han añadido para el objeto equivocado. Cuando la programación multi-navegador, lo mejor es usar sólo propiedad del mensaje.
Un caso de prueba:
Pie de foto

Mientras que el código está incluido en la cláusula finalmente, independientemente tratar o bloque catch lo que se incluye en el código - instrucción de retorno aún no impedirá la ejecución de la cláusula finally. Como se muestra en el siguiente ejemplo:

function testFinally() {
  try {
    return 2;
  } catch (error) {
    return 1;
  } finally {
    return 0;
  }
}
function testWithoutFinally() {
  try {
    return 2;
  } catch (error) {
    return 1;
  }
}
console.log(testFinally());//输出0
console.log(testWithoutFinally());//输出2

Si se proporciona la cláusula por último, las cláusulas de captura se hizo opcional (hay una trampa o, finalmente, puede). Internet Explorer 7 y versiones anteriores tienen un error: a menos que exista una cláusula catch, o, finalmente, el código no se ejecuta nunca. IE8 corrige este error. Si aún desea considerar una versión anterior de Internet Explorer, que tuvo que proporcionar una cláusula catch, incluso si no hay nada que escribir.

Otro caso de prueba:

var example = function() {
  try {
    window.someNonexistentFunction();
  } catch (error) {
    console.log(error.name);
    console.log(error.message);
    return 1;
  } finally {
    console.log('everything is over');
  }
};
example();

Resultados de la prueba: Tiene la aplicación de las capturas / finally / intento, la pregunta es ¿por qué la instrucción return en la implementación final de un truco? Es un problema por sí mismos.
Pie de foto

Error tipo 2

Cada uno tiene un correspondiente tipo de error del error, y cuando se produce un error, se lanzará el error tipo de objeto (objeto de error) correspondientes. ECMA-262 define los siguientes siete tipos de tipos de errores:

1) Error es un tipo base, otros tipos de error se heredan del tipo. Por lo tanto, todos los tipos de error comparten el mismo conjunto de atributos (por objeto de error todo método de objeto predeterminado).
Cuando es lanzado 2) Tipo de EvalError de excepción de error se produce cuando se utiliza la función eval (), pero no necesariamente EvalError arrojado tipo de error. Sin la función eval () como una llamada a la función, Firefox 4+ IE8 y esto lanza TypeError.

3) tipos RangeError de errores se activarán cuando el valor excede el rango correspondiente. Por ejemplo, cuando la definición de la matriz, si no son compatibles el número de elementos de la matriz (tal como -20 o Number.MAX_VALUE) se especifica, se disparará este error.

4) En el caso de un objeto no se puede encontrar, se produce ReferenceError (en este caso, dará lugar directamente a la conocida "objeto esperado" error navegador). Normalmente, cuando se accede a una variable que no existe, se produce este error.

5) En cuanto a SyntaxError, cuando pasamos por un error de sintaxis en función de JavaScript cadena eval (), que dará lugar a este tipo de errores. Si un código de error de sintaxis aparece fuera es menos probable que el uso SyntaxError la función eval (), ya que el error de sintaxis hace que el código JavaScript para detener inmediatamente la ejecución.

6) Cuando el tipo de TypeError utiliza a menudo en JavaScript, conservado en un tipo de variable de accidente, o cuando el método de acceso que no existe, esto dará lugar a error. Aunque la causa del error variado, pero el análisis final, o porque al realizar tipos específicos de operaciones, tipos de variables no cumple con los requisitos del debido. tipo incorrecto de la situación se presenta con mayor frecuencia, son los parámetros pasados ​​a la función sin examen previo, los resultados del tipo de entrada no coincide con el tipo esperado.

7) Cuando se utiliza encodeURI () o decodeURI (), y el formato URI es incorrecta, que dará lugar URIError de error. Este error también es muy raro, debido a que la tolerancia a fallos dijo anteriormente, estas dos funciones son muy altos.

FF en el procedimiento de ensayo anterior son los siguientes:

Pie de foto

3 Utilice la sentencia try-catch para detectar los errores

Para conocer el tipo de error, que puede ser utilizado en la sentencia catch operador instanceof en la sentencia try-catch de la siguiente manera.

try {
  someFunction();
} catch (error){
  if (error instanceof TypeError){
//处理类型错误
} else if (error instanceof ReferenceError){
//处理引用错误
} else {
//处理其他类型的错误
}
}

En la programación multi-navegador, comprobación de errores es la forma más fácil de determinar el tipo de tratamiento, y los mensajes de error incluido en los atributos de mensaje variará dependiendo del navegador.
Uso try-catch más adecuado para hacer frente a esos errores que no podemos controlar. Supongamos que utiliza una gran biblioteca de JavaScript, intencionalmente o no, la función puede disparar algunos errores. Puesto que no podemos modificar el código fuente de la biblioteca, se puede colocar en la gran llamada de la instrucción try-catch función que, si hay algún error, superando a manejar apropiadamente.

4 tiro lanza un error personalizado

Y la sentencia try-catch para que coincida con el operador, así como un tiro, tirar un error personalizado para cualquier momento. Cuando se produce un error, se debe dar al operador de tiro para especificar un valor, este valor es qué tipo, no hay ningún requisito. El tiro en la cara del operador, el código se detendrá inmediatamente la ejecución. Sólo cuando hay sentencia try-catch para capturar el valor de ser lanzado, el código continuará.

Mediante el uso de una costumbre incorporada en los tipos de error, puede más realista de error del navegador Simulación. Cada tipo de error constructor toma un argumento, es decir, el mensaje de error real. He aquí un ejemplo.

throw new Error("Something bad happened.");
throw new SyntaxError("I don’t like your syntax.");
throw new TypeError("What type of variable do you take me for?");
throw new RangeError("Sorry, you just don’t have the range.");
throw new EvalError("That doesn’t evaluate.");
throw new URIError("Uri, is that you?");
throw new ReferenceError("You didn’t cite your references properly.");

El navegador será como el manejo de errores generados por la naturaleza, como el código de errores mango lanzados. En otras palabras, el navegador va a informar del error de una manera convencional, y aparecerá aquí mensajes de error personalizados.

Lanza un significado error personalizado: fácil y rápidamente localizar la corrección de errores y el error. Aunque el navegador de su propio error, pero el mensaje de error no puede llegar a la unidad en el navegador, y si el mismo tipo de error se produce, buscar el origen es complejo, especialmente en los miles de líneas de código. Pero si se conocen los posibles códigos de error se pueden añadir directamente desde el código estos errores personalizados, una vez que estos errores, errores del navegador reportados por la definición, la clave está en el lugar equivocado y el tipo de obvio.
Ejemplo: la matriz debe recibir un parámetro de la función como argumento será dado si la cadena de caracteres recibida.

function process(values){
    values.sort();
    for (var i=0, len=values.length; i < len; i++){
        if (values[i] > 100){
            return values[i];
        }
    }
    return -1;
}
var a = process("string");
 console.log(a);

Firebug resultado: Adición de códigos de error personalizados:
Pie de foto

function process(values){
  if (!(values instanceof Array)){
    throw new Error("process(): Argument must be an array.");
  }
    values.sort();
    for (var i=0, len=values.length; i < len; i++){
        if (values[i] > 100){
            return values[i];
        }
    }
    return -1;
    }

var a = process("string");
 console.log(a);

Firebug resultado:
Pie de foto

Si el argumento de los valores no es una matriz, se generará un error. El mensaje de error incluye el nombre de la función, y por qué una descripción clara del error se producirá. Si este error se produce una aplicación web compleja, a continuación, buscar la raíz del problema sería más fácil.

También puede utilizar la cadena de prototipo para crear tipos de error personalizados por error herencia. En este punto, es necesario especificar el nombre y el tipo de atributo de mensaje de error es de nueva creación.
Un ejemplo:

//通过继承Error实现自定义错误类型,要定义name和message属性
   function CustomError(message){       
       this.name = "CustomError";
       this.message = message;
   }
   CustomError.prototype = new Error();

   function process(values){
       //如果出现错误,就抛出自定义错误类型的对象实例
       if (!(values instanceof Array)){
           throw new CustomError("process(): Argument must be an array.");
       }
       values.sort();
       for (var i=0, len=values.length; i < len; i++){
           if (values[i] > 100){
               return values[i];
           }
       }
       return -1;
   }

   process("string");

tipos personalizados pantalla firebug de errores:

Pie de foto

5 generará un error utilizando los errores de captura try-catch

Acerca de cuándo iniciar un error, y cuándo usar try-catch para su captura, es un problema común. En general, la arquitectura de aplicaciones de bajo nivel a menudo generará un error, pero este nivel no afecta a la implementación actual del código, por lo que los errores por lo general no son el verdadero negocio. Si tiene la intención de escribir una biblioteca JavaScript para ser utilizado en muchas aplicaciones, sólo uno incluso podría escribir la función auxiliar en varias ubicaciones dentro de la aplicación, recomiendo encarecidamente que proporcione información detallada cuando se genera un error. A continuación, puede capturar en su aplicación y manejar adecuadamente estos errores.
Cuando se trata de tirar errores y detectar errores, debemos pensar sólo capturar a los que sabe exactamente cómo hacer frente a los errores. El propósito es evitar el error del navegador de captura predeterminado para tratar con ellos; y lanzar un error objetivos de proporcionar información sobre la causa específica del error.

Supongo que te gusta

Origin www.cnblogs.com/homehtml/p/12594072.html
Recomendado
Clasificación