Introduce los errores de sintaxis, ejecución y lógica, el objeto Error, las trazas y la diferencia entre fallos esperados, operativos y de programación.
En conversaciones técnicas suelen utilizarse como sinónimos, pero conviene distinguir la idea:
Un error es el problema.
Una excepción es la interrupción del flujo producida mediante throw o por el propio entorno.
JavaScript
thrownewError("Operation failed");
JavaScript busca un bloque capaz de manejar esa excepción. Si no encuentra uno, llega hasta el entorno superior y normalmente se reporta como error no capturado.
name describe la clase general del error y message explica el caso concreto.
stack suele mostrar la cadena de llamadas activa, pero su formato depende del runtime y no debe tratarse como un contrato portable para lógica de negocio.
functioncreatePercentage(value){if(!Number.isFinite(value)){thrownewTypeError("Percentage must be a finite number",);}if(value <0|| value >100){thrownewRangeError("Percentage must be between 0 and 100",);}return value;}
La entrada viola las condiciones necesarias para crear un porcentaje válido.
No existe una regla universal de “todo se retorna” o “todo se lanza”. El contrato debe expresar si una ausencia es esperada o si la operación quedó en un estado inválido.
const user = users.find((candidate)=> candidate.id === userId,);return user?.name ??"Unknown";
Las excepciones son apropiadas cuando la operación no puede cumplir su contrato, no para reemplazar decisiones normales que el código puede expresar directamente.
functionreadPort(environment){const rawPort = environment.PORT;if(rawPort ===undefined){return3000;}const port =Number(rawPort);if(!Number.isInteger(port)){thrownewTypeError("PORT must be an integer",);}if(port <1|| port >65535){thrownewRangeError("PORT must be between 1 and 65535",);}return port;}
La ausencia tiene un valor predeterminado. Un valor presente pero inválido produce un error porque continuar con él haría que la configuración fuera engañosa.
divide debería rechazar un divisor cero si su contrato no define otro resultado válido. findUser puede devolver null cuando la ausencia de un usuario es un resultado esperado. La decisión final depende del contrato documentado.