# Rethrowing an exception in JavaScript

Let's consider the `catch`-block of the task with product JSON:

`catch (error) { if (error.name == 'SyntaxError') { alert('Invalid JSON of the product'); } else if (error.name == 'ProductCostError') { alert('Product has no price or amount'); } }`

As you can see, we catch the two exceptions we planned and somehow react to it. But what happens if an exception of a different type that we didn't expect occurs? In this case, it will also fall into a `catch`-block, but there will be no reaction to this, since the exception with a different type simply will not fall into any of our IFs.

When I say that there will be no reaction, I mean that there really is none: there will not even be an error thrown into the console. Our code just silently won't work.

Therefore, there is the following rule: your code should only catch exceptions that it knows how to handle. If the exception is not known, then it must be rethrow further with `throw`. In this case, someone more knowledgeable will catch it above, or an exception will be thrown into the console as an error.

Let's fix our code:

`catch (error) { if (error.name == 'SyntaxError') { alert('Invalid JSON of the product'); } else if (error.name == 'ProductCostError') { alert('Product has no price or amount'); } else { throw error; // rethrow the exception further } }`

Given the following code:

`try { let arr = JSON.parse(json); for (let i = 0; i < arr.length; i++) { localStorage.setItem(i, arr[i]); } } catch (error) { if (error.name == 'QuotaExceededError') { alert('ran out of storage space'); } if (error.name == 'SyntaxError') { alert('invalid json'); } }`

What's wrong with this code? Fix it for a better one.

← →
↑
en ru