For AI agents: the complete documentation index is available at /tc39-atlas/en/llms.txt, the full documentation bundle is available at /tc39-atlas/en/llms-full.txt, and this page is available as Markdown at /tc39-atlas/en/proposals/stage/4/proposal-optional-catch-binding.md.
  • English
  • Optional catch binding S4

    Proposal details
    Proposal overview

    This proposal addresses the common practice of using an unused catch binding (e.g., catch (unused)) in scenarios where errors are intentionally ignored, which can signal a programming error. It introduces a grammar change to ECMAScript allowing the omission of the catch binding and its parentheses, enabling syntax like catch { . }.

    Note

    The README below comes from the upstream repository and may contain outdated stage or status metadata. Use the proposal details above as the current source of truth.

    This proposal makes a grammatical change to ECMAScript, allowing the omission of a catch binding in cases where the binding would not be used. This occurs frequently with patterns such as

    try {
      // try to use a web feature which may not be implemented
    } catch (unused) {
      // fall back to a less desirable web feature with broader support
    }

    or

    let isTheFeatureImplemented = false;
    try {
      // stress the required bits of the web API
      isTheFeatureImplemented = true;
    } catch (unused) {}

    or

    let parseResult = someFallbackValue;
    try {
      parseResult = JSON.parse(potentiallyMalformedJSON);
    } catch (unused) {}

    and it is a common opinion that variables which are declared or written to but never read signify a programming error.

    The grammar change introduced by this proposal allows for the catch binding and its surrounding parentheses to be omitted, as in

    try {
      // ...
    } catch {
      // ...
    }

    See the the full text of the proposal for more info.