w3schools sirve que para pagina funcion ejecutar despues cargar carga asincrona antes javascript object error-handling exception-handling throw

javascript - sirve - pushstate w3schools



¿Cuál es la diferencia entre `lanzar un nuevo error ''y` lanzar algún objeto''? (4)

Quiero escribir un controlador de errores común que detectará errores personalizados lanzados a propósito en cualquier instancia del código.

Cuando throw new Error(''sample'') como en el siguiente código

try { throw new Error({''hehe'':''haha''}); // throw new Error(''hehe''); } catch(e) { alert(e); console.log(e); }

El registro se muestra en Firefox como Error: [object Object] y no pude analizar el objeto.

Para el segundo throw el registro se muestra como: Error: hehe

Mientras que cuando lo hice

try { throw ({''hehe'':''haha''}); } catch(e) { alert(e); console.log(e); }

la consola se mostró como: Object { hehe="haha"} en el que pude acceder a las propiedades de error.

¿Cuál es la diferencia?

¿Es la diferencia como se ve en el código? ¿La cadena similar solo se pasará como cadena y el objeto como objetos pero la sintaxis será diferente?

No he explorado el lanzamiento de un objeto de error ... Solo había hecho tirar cuerdas.

¿Hay alguna otra manera que los dos métodos mencionados anteriormente?


lanzar "I''m Evil"

Throw finalizará la ejecución adicional y expondrá la cadena de mensaje al detectar el error.

try{ throw ''I/'m Evil'' console.log(''You/'ll never reach to me'', 123465) } catch(e){ console.log(e); //I/'m Evil }

Consola tras lanzamiento nunca se alcanzará causa de terminación.

lanzar nuevo error ("soy tan dulce")

lanzar un nuevo error expone un evento de error con dos parámetros nombre y mensaje . También termina la ejecución posterior.

try{ throw new Error(''I/'m Evil'') console.log(''You/'ll never reach to me'', 123465) } catch(e){ console.log(e.name, e.message); //Error, I/'m Evil }


Aquí hay una buena explicación sobre el objeto Error y cómo lanzar sus propios errores.

El objeto de error

justo lo que podemos extraer de él en caso de error. El objeto Error en todos los navegadores admite las siguientes dos propiedades:

  • nombre: el nombre del error, o más específicamente, el nombre de la función constructora a la que pertenece el error.

  • mensaje: una descripción del error, que varía según el navegador.

La propiedad name puede devolver seis valores posibles que, como se mencionó, corresponden a los nombres de los constructores del error. Son:

Error Name Description EvalError An error in the eval() function has occurred. RangeError Out of range number value has occurred. ReferenceError An illegal reference has occurred. SyntaxError A syntax error within code inside the eval() function has occurred. All other syntax errors are not caught by try/catch/finally, and will trigger the default browser error message associated with the error. To catch actual syntax errors, you may use the onerror event. TypeError An error in the expected variable type has occurred. URIError An error when encoding or decoding the URI has occurred (ie: when calling encodeURI()).

Lanzar tus propios errores (excepciones)

En lugar de esperar a que ocurra uno de los 6 tipos de errores antes de que el control se transfiera automáticamente del bloque try al bloque catch, también puede lanzar explícitamente sus propias excepciones para forzar que eso suceda a pedido. Esto es excelente para crear sus propias definiciones de qué es un error y cuándo debe transferirse el control a la captura.


El siguiente artículo tal vez entra en más detalles sobre cuál es la mejor opción; throw ''An error'' o throw new Error(''An error'') :

http://www.nczonline.net/blog/2009/03/10/the-art-of-throwing-javascript-errors-part-2/

Sugiere que el último ( new Error() ) es más confiable, ya que los navegadores como Internet Explorer y Safari (que no están seguros de las versiones) no informan correctamente el mensaje cuando usan el primero.

Si lo hace, se producirá un error, pero no todos los navegadores responden de la manera que usted espera. Firefox, Opera y Chrome muestran un mensaje de "excepción no detectada" y luego incluyen la cadena del mensaje. Safari e Internet Explorer simplemente lanzan un error de "excepción no detectada" y no proporcionan la cadena de mensajes. Claramente, esto es subóptimo desde el punto de vista de la depuración.


Primero mencionas este código:

throw new Error(''sample'')

y luego en tu primer ejemplo escribes:

throw new Error({''hehe'':''haha''})

El primer objeto Error realmente funcionaría, porque está esperando un valor de cadena, en este caso ''muestra''. La segunda no lo haría porque está intentando pasar un objeto y está esperando una cadena.

El objeto de error tendría la propiedad "mensaje", que sería "muestra".