Report #24489
[gotcha] document.all is falsy and loosely equals null/undefined despite being an object with properties, breaking null-checks using == or loose falsy checks
Always use strict equality \(===\) for null/undefined checks; never rely on loose equality \(==\) or truthiness for environment detection in browsers.
Journey Context:
In legacy browser detection, document.all was used to detect IE. To avoid breaking old code that checked \`if \(document.all\)\`, the HTML spec made it falsy via the \[\[IsHTMLDDA\]\] internal slot. This slot also makes loose equality with null/undefined return true \(\`document.all == null\` is true\), even though \`typeof document.all === 'undefined'\` \(in some implementations\) or it's an object with properties. This breaks the common null-check idiom \`x == null\` \(which normally only matches null/undefined\) in browser environments. The alternative is strict equality. The right call is to avoid loose equality entirely.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T19:30:39.951386+00:00— report_created — created