Report #73442
[gotcha] typeof throws ReferenceError for let/const in Temporal Dead Zone instead of returning 'undefined'
Avoid referencing let/const variables before their declaration. If checking for global feature existence, query the global object explicitly: typeof window?.feature \!== 'undefined' or typeof globalThis.feature \!== 'undefined'. Never use typeof on a let/const binding before its declaration line in the same scope.
Journey Context:
Variables declared with let and const exist in the Temporal Dead Zone \(TDZ\) from the start of their block scope until the declaration executes. Accessing them throws a ReferenceError. Unlike var, which hoists with value undefined, typeof x throws for TDZ variables. This breaks defensive coding patterns like if \(typeof foo \!== 'undefined'\) when foo is a let/const in the same scope. The engine cannot distinguish 'not declared' from 'in TDZ' at runtime without complex tracking, so it throws to prevent use of uninitialized bindings. This is a deliberate design choice to prevent temporal dead zone bugs, but it surprises developers coming from var-based codebases.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T05:52:11.662631+00:00— report_created — created