w3schools dice que las excepciones pueden ser cadenas, enteros, booleanos u objetos, pero el ejemplo dado no me parece una buena práctica, ya que la verificación del tipo de excepción se realiza a través de la comparación de cadenas. ¿Es este el método preferido de manejo de excepciones en JavaScript? ¿Hay tipos de excepciones integradas (como NullPointerException)? (en caso afirmativo, ¿qué son, qué tipo de herencia utilizan, y se prefieren sobre otras opciones?)¿Cuáles son las prácticas estándar para arrojar excepciones de JavaScript?
Respuesta
Las excepciones pueden ser lo que quieras.
En otros idiomas, las excepciones deben ser instancias, y luego la declaración catch
elige qué excepciones capturar y cuáles dejar pasar por la clase de la instancia.
JavaScript, sin embargo, no tiene esta característica. Solo puede capturar todas las excepciones, y luego ver el valor para decidir qué hacer con él. Si no desea manejar una excepción, debe volver a lanzar el valor capturado manualmente. (Esto inevitablemente hace que las declaraciones catch
sean bastante complicadas.)
Puede decidir implementar sus excepciones como objetos y compararlas con instanceof
. O podría tener valores opacos únicos para comparar. O incluso puedes lanzar cuerdas o números rectos si realmente quieres.
¿Hay tipos de excepción incorporados (como NullPointerException)?
Tipo de. ECMAScript define algunas clases de error estándar: Error
y sus subtipos EvalError
, RangeError
, ReferenceError
, SyntaxError
, TypeError
, URIError
. Sin embargo, hay problemas de implementación del navegador, por ejemplo try { nonexistentvar; }
da TypeError
en IE en lugar de ReferenceError
. Y hay muchas otras excepciones específicas del navegador, especialmente cuando se trata del DOM.
No es tradicional usar estos objetos directamente, y tratar de subclase es complicado (ya que JavaScript no tiene un sistema de clase como tal).En su lugar, tenderá a atenerse a sus propias excepciones definidas para el uso de sus propias aplicaciones. Las excepciones no son muy utilizadas en JavaScript.
Puede probar Dean Edwards 'Base project. Emula la herencia de clase en javascript, por lo que usarlo le permitiría crear una subclase del tipo de error. No puede detectar diferentes tipos de errores en javascript (ya que no es un lenguaje fuerte), pero puede determinar el tipo de error que se lanzó y agregar lógica para ese tipo específico, así:
try {
// do something
} catch (e) {
if (e instanceof NullPointerError) {
// handle nullpointer exception
} else if (e instanceof RuntimeError) {
// handle runtime exception
} else {
// regular exception
}
}
Por supuesto en este código supongo que ha declarado las clases NullPointerError y RuntimeError como subclases de Error.
La sección 15.11 del ECMA-262 specification define varios tipos Error
que "se lanzan como excepciones cuando se producen errores de tiempo de ejecución ... [ellos] también pueden servir como objetos base para clases de excepciones definidas por el usuario". Esa especificación también define six other error types que son parte del lenguaje.
Parece preferible lanzar excepciones de estos tipos (o tipos derivados de ellos) ya que es más fácil determinar su tipo; también tienen una propiedad de mensaje incorporada.
En mi propia experiencia, los bloques try/catch son algo raros y se sienten realmente excepcionales en lugar de ser inevitables como en Java.
- 1. Mejores prácticas: arrojar excepciones desde las propiedades
- 2. ¿Cuáles son las mejores prácticas estándar de la industria para implementar excepciones personalizadas en C#?
- 3. JavaScript curry: ¿cuáles son las aplicaciones prácticas?
- 4. ¿Qué son las excepciones estándar de Scala?
- 5. ¿Cuáles son las aplicaciones prácticas de Colas?
- 6. Índices MySQL: ¿cuáles son las mejores prácticas?
- 7. ¿Cuáles son las ventajas prácticas del currying?
- 8. ¿Cuáles son las mejores prácticas para repositorios de horno?
- 9. ¿Cuáles son las mejores prácticas para usar Z2 Availability Zones?
- 10. nhibernate: ¿cuáles son las mejores prácticas para implementar la igualdad?
- 11. CSS3 - ¿Cuáles son las mejores prácticas de rendimiento?
- 12. ¿Cuáles son las mejores prácticas para diseñar esquemas XML?
- 13. ¿Cuáles son las mejores prácticas para registrar un error?
- 14. ¿Cuáles son algunas de las mejores prácticas de uso de la Biblioteca estándar de C++?
- 15. Manejo de excepciones: lanzar, arrojar y Throwable
- 16. ASP.NET MVC: ¿Dónde arrojar las excepciones?
- 17. ¿Cuáles son las mejores prácticas para evitar CSS obsoletos y JavaScript?
- 18. ¿Cuáles son las garantías de complejidad de los contenedores estándar?
- 19. ¿Cuáles son las "consecuencias prácticas" del uso de referencias suaves?
- 20. ¿Cuáles son algunas de las mejores prácticas para crear mi propia excepción personalizada?
- 21. Prácticas estándar para Subversion
- 22. Java, excepciones específicas de clase frente a excepciones estándar
- 23. MVC3 y EF Data first: ¿cuáles son las mejores prácticas?
- 24. ¿Cuáles son las mejores prácticas en la interoperabilidad del lenguaje?
- 25. ¿Cuáles son las mejores prácticas al usar SWIG con C#?
- 26. Devolver después de arrojar excepciones
- 27. ¿Cuáles son las mejores prácticas para el manejo de errores al escribir una API para el iphone?
- 28. ¿Cuáles son las mejores prácticas para la programación de diseño por contrato?
- 29. ¿Cuáles son las diferencias prácticas entre formularios especiales y macros?
- 30. ¿Cuáles son las mejores prácticas para representar informes de hojas de Excel en Java?
Puede encontrar útil esta pregunta SO: http://stackoverflow.com/questions/783818/how-do-i-create-a-custom-error-in-javascript – Adam