Why is `catch` a [reserved] keyword?

Jeff Morrison lbljeffmo at gmail.com
Tue Jun 17 12:27:40 PDT 2014

I was just talking with a co-worker today about why it's ok for 'catch' 
to be a property name, but not a variable identifier. It's clear that 
the reasoning here is because property names aren't restricted by 
reserved words, but it's unclear why 'catch' must be reserved to begin with?

I had always assumed that keywords are reserved for syntax ambiguity 
reasons...but when I think about it I can't come up with any scenarios 
where a hypothetical 'catch' variable could be ambiguous with a catch 
block... What am I missing?

Since try blocks must always be followed by either a catch-block, a 
finally-block, or catch-then-finally it seems it's always easily 
possible to distinguish a catch block from a function-call + empty-block:
// Never an ASI concern because try is followed by catch
try { stuff(); }
catch(e) {}

// Not valid, so it's not possible to confuse this with try-finally + 
call + empty block
try { stuff(); }
finally { }
catch (e) {}


More information about the es-discuss mailing list