¿Por qué las excepciones se usan menos en JavaScript que en otros idiomas?

Esto se debe principalmente a que el flujo del programa en JS (hasta hace poco) ha sido de naturaleza más asincrónica y, como resultado, intentar capturar generalmente no fue muy útil. Además, las mejores prácticas son no usar try / catch.

Ejemplo asíncrono:

tratar {
myAsyncCallToFetchData ()
} captura (e) {
console.log (‘La única forma en que esto se disparará es si la función anterior ni siquiera existe’);
}

Por lo tanto, el código anterior no es muy útil porque solo detectará errores hasta que se llame a la función asincrónica.

Como resultado, la gente construyó un nuevo concepto para detectar errores asincrónicos, llamado promesa. Esto te permite expresar cosas como esta:

mi promesa
.then (función (datos) {
// ¡Éxito!
})
.catch (función (e) {
// Error
});

Esto funcionó por un largo tiempo. Verá una gran cantidad de código JavaScript de back-end haciendo esto. Es probable que todo el código de front-end relacionado con la red también haga esto. Sin embargo, esto aún no es ideal, es posible que aún necesite envolver todo esto en un intento de captura en caso de que algo se rompa sincrónico. Esto es extremadamente tedioso, y el retorno del tiempo empleado es malo. Afortunadamente, recientemente se implementó una nueva característica llamada espera asíncrona. Ahora puedes hacer lo siguiente:

función asíncrona processStuff () {
tratar {
const myData = aguardar myAsyncFetchCall ();
// … haz algunas cosas
} captura (e) {
// ¡Atraparé todos los errores ahora!
}
}

Por lo tanto, este intento de captura ahora es más efectivo ya que detecta más errores. Debajo del capó, se traducirá .then y .catch de una promesa de permitir que el intento de captura funcione correctamente.

Creo que con el tiempo, como resultado de la espera asincrónica, veremos un manejo de excepciones mucho más tradicional en JS. Ha sido realmente difícil usarlo razonablemente antes. Además, hubo muchas mejores prácticas de la comunidad que indicaron que no deberíamos usar try catch por una multitud de razones. Durante un largo período de tiempo, a las devoluciones de llamada también se les pasaron ‘errores’. A veces, el resultado de una llamada a la función también sería un objeto de error. En general, muchos sistemas simplemente explotan si pasa las variables incorrectas. ¡Ojalá todo esto cambie! Con la llegada de la verificación de tipo y asíncrono aguardan, creo que podría.

Porque, JavaScript es un lenguaje de script. Las excepciones se manejan para evitar que el programa o software finalice inesperadamente. En los navegadores web, el HTML y CSS no se ven afectados por las excepciones de JavaScript.

Si JavaScript encuentra una excepción de tiempo de ejecución, solo la parte de JavaScript de la página deja de funcionar, el resto de la página se representa en el navegador sin ningún problema. Es por eso que las excepciones se usan menos en JavaScript que otros lenguajes.

Pero siempre es una buena práctica si utiliza el manejo de excepciones en todas partes cuando sea necesario.

DEBEN usarse tanto como en cualquier otro lugar.

Es solo una cuestión de educación. Sin embargo, debe tenerse en cuenta que el manejo de excepciones en aplicaciones de IU requiere algunas estrategias diferentes de las que serían para una aplicación que no es GUI, como un servidor.

El ejemplo más relevante en este momento es Promise. Sin manejo de errores, el objeto Promise es una pesadilla para depurar. El 100% de las promesas utilizadas en un proyecto deben tener manejo de errores.