Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

146
Vistas
How to throw "expressive" / console friendly exceptions in JavaScript?

JavaScript noob here... I'm exploring various options for throwing exceptions.

Throwing a string / primitive value

This seems to be bad practice for several reasons (catching, stacktrace, ...)

Using Error

throw new Error("bad times")

This seems to be a common approach, but I'm not a big fan because I can't easily add extra information. I can't for example do

throw new Error("bad times", { reason: strangeObject })

I could JSON.stringify the extra information, but I like when I can expand / collapse the object in the console.

From what I can tell I won't get any farther with custom exceptions / Error-subclasses.

Throwing { msg: "bad times", reason: strangeObject }

This allows me to expand / collapse strangeObject nicely in the console. For exceptions throughout my application to be consistent, I'd need to repeat the msg: part everywhere, which I'm not a fan of.

I ended up going for the last approach, just to find out that the ESLinter complains about this approach:

Expected an error object to be thrown no-throw-literal

So, my question is basically: Can I use Error (or custom Error subclasses) in a console-friendly way, i.e. support expand/collapse?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

I've settled for a custom exception and a window.onerror handler:

class MyAppError extends Error {
  constructor(msg, details) {
    super(msg)
    this.details = details
  }
}

window.onerror = function(message, source, lineno, colno, error) {
    if (error instanceof MyAppError) {
        console.error(message, error.details)
        return true
    }
    return false
}

function throwSomething() {
    throw new MyAppError("I made a mess", {
        someDetail: "a value",
        otherStuff: "another value"
    });
}

console.log("Hello World");
throwSomething();

(JSFiddle)

Result looks like this in Firefox and Chrome, which I'm quite happy with.

enter image description here

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda