What Is Different Between Null And Undefined?
JavaScript keeps two close cousins in the primitive-value family: null and undefined. They’re both placeholders for “no value,” yet they’re not identical. Think of them as two slightly different ways a developer can say, “This variable intentionally has nothing here.”
Quick Fix Summary:
Use === when you need strict type and value equality.
Use == when you want the language to coerce null and undefined to the same result.
Null and undefined are different in JavaScript. Undefined means a variable was declared but never assigned a value, while null is an explicit assignment meaning “no value.”
What's Happening
- undefined is the default value of any variable that has been declared but never assigned a value.
- null is an explicit assignment meaning “no value.”
- Here’s a weird quirk: typeof null returns the string
"object"—a historical bug in JavaScript that still shows up in every browser as of 2026.MDN Web Docs - Both null and undefined are falsy, but their types differ: one is an object, the other is its own primitive.
Null and undefined aren't the same. Undefined is the default when a variable exists but has no value, while null is a deliberate choice to represent nothing.
Step-by-Step Solution
- Open your browser’s developer tools (F12 or Ctrl+Shift+I / Cmd+Opt+I).
- In the Console tab, type
typeof undefined === typeof nulland press Enter.
You’ll seefalsebecause their types differ. - Type
null == undefined(double equals) and press Enter.
You’ll seetruebecause JavaScript performs type coercion. - Type
null === undefined(triple equals) and press Enter.
You’ll seefalsebecause the types aren’t identical.
Use strict equality checks to tell them apart. Triple equals (===) distinguishes them, while double equals (==) treats them as the same.
If This Didn't Work
- Check scope: if you’re inside a block and the variable wasn’t hoisted, it may be undefined instead of null.
- Inspect your build tools: some transpilers or minifiers can accidentally turn undefined into null or vice-versa.
- Test in strict mode: add
"use strict";at the top of your script to prevent accidental global variables that can confuse the two.MDN Strict Mode
Debugging issues? Scope and tooling often cause mix-ups. Strict mode and careful variable declarations help keep null and undefined straight.
Prevention Tips
| Scenario | Best Practice | Example |
|---|---|---|
| Function return | Explicitly return null when nothing exists | return result === undefined ? null : result; |
| Object property | Use hasOwnProperty or Object.hasOwn instead of checking null/undefined |
if (Object.hasOwn(obj, 'prop')) {...} |
| Default value | Use logical OR (||) or nullish coalescing (??) to avoid undefined surprises |
const value = obj.prop ?? 'default'; |
Remember: null is intentional; undefined is accidental. Keep them apart in your code and you’ll avoid a whole class of subtle bugs that still trip up even senior developers in 2026.
Null is deliberate, undefined is accidental. Treat them differently in your code to prevent hidden bugs.