Error catch-bindings are finally optional (#tilPost)

I just made my way through my weekly newsletters and came across the optional catch-binding proposal which shipped in ES2019.
The language addition allows developers to finally omit the error argument when dealing with try/catch sta…

I just made my way through my weekly newsletters and came across the optional catch-binding proposal which shipped in ES2019.

The language addition allows developers to finally omit the error argument when dealing with try/catch statements. This feature can become especially handy in modern JavaScript code that uses async/await a lot.

A few lines of code describe it best:

// classical try/catch
// ✅ works
try {
  throw new Error('oh noes');
} catch(e) {
  console.log(`Error!!! But, I don't care about the error object...`);
} 



// try/catch without error arguments
// ❌ throws "Uncaught SyntaxError: Unexpected token ')'"
try {
  throw new Error('oh noes');
  
//     👇 omitting the error argument doesn't work...
} catch() {
  console.log(`Error!!! But, I don't care about the error object...`);
} 



// try/catch without error binding
// ✅ works again 🎉
// (across majors Edge, Firefox, Safari, Chrome)
try {
  throw new Error('oh noes');

//     👇 omitting `()` altogether works now 🎉
} catch {
  console.log(`Error!!! But, I don't care about the error object...`);
}

This language addition was a little bit controversial, and people discussed it hotly in the proposal repository. Personally, I think it can be handy in some instances of quick prototyping where perfect error handling is secondary.

Reading about the feature, it turned out that major browsers (Chrome, Safari, Edge, Firefox) support the addition already. 🎉 If you have to support more than the latest and greatest browsers, you can also use the babel plugin to use this new language feature today.

(The MDN docs are currently outdated, and a PR is pending)

If you want to learn more about it, here are some additional resources:


Reply to Stefan
Print Share Comment Cite Upload Translate
CITATION GOES HERE CITATION GOES HERE
Select a language: