Detekce typu chyby pomocí JavaScriptu

Hlášení chyb v JavaScriptu a jejich zachycení je důležité a bude ještě důležitější, až budou naše webové aplikace bohatší a výkonnější. Nikdy jsem nepoužil try/catch bloky do hloubky – obvykle pouze zachytím výjimky pro věci, o kterých je známo, že způsobují problémy.

Pamatujete si tohle ze dnů IE6?

try {
 document.execCommand('BackgroundImageCache', false, true);
} catch(e) {}

Chlapec byl tak zábavný. Mobile Webkit si dříve (a stále může) stěžovat na používání localStorage, když jsou oprávnění určitým způsobem, takže bych try/catch to taky:

try { // Adding try/catch due to mobile Safari weirdness
	if('localStorage' in window) {

	}
} catch(e) {}

Pokud ale nesledujete chyby ve své aplikaci, přicházíte o případy, kdy dochází k legitimním problémům. Jak ale víte, na jaký typ výjimky jste narazili? Je to jednodušší, než si myslíte:

try {
	eval('5 + / 3'); // will raise SyntaxError exception
}
catch(e) {
	// Compare as objects
	if(e.constructor == SyntaxError) {
		// There's something wrong with your code, bro
	}

	// Get the error type as a string for reporting and storage
	console.log(e.constructor.name); // SyntaxError
}

Porovnání objektů můžete provést, pokud plánujete s chybou něco udělat na základě typu, nebo pokud chcete informace o chybě někde uložit, můžete získat název výjimky!