What is the difference between null and undefined in JavaScript?
In JavaScript, both `null` and `undefined` represent the absence of a meaningful value, but they signify different kinds of absence and arise under distinct circumstances. Understanding their differences is crucial for writing robust JavaScript code.
Understanding undefined
undefined is a primitive value that indicates a variable has been declared but has not yet been assigned a value. It also occurs when trying to access a non-existent object property or when a function does not explicitly return a value.
- A variable declared without being assigned a value is
undefined. - A function that doesn't explicitly return a value returns
undefined. - Accessing a non-existent property of an object results in
undefined. - The
typeofoperator returns 'undefined' forundefinedvalues.
let myVariable;
console.log(myVariable); // Output: undefined
function doNothing() {}
console.log(doNothing()); // Output: undefined
const obj = { a: 1 };
console.log(obj.b); // Output: undefined
console.log(typeof undefined); // Output: "undefined"
Understanding null
null is a primitive value that represents the intentional absence of any object value. It is explicitly assigned by a programmer to indicate that a variable has no value or points to no object. It is often used to clear a variable or property.
- It must be explicitly assigned by the developer.
- It signifies a deliberate non-value or absence of an object.
- The
typeofoperator returns 'object' fornull, which is a historical bug in JavaScript, butnullis a primitive value.
let emptyValue = null;
console.log(emptyValue); // Output: null
const user = { name: 'Alice' };
// Later, if user data is cleared:
user.name = null;
console.log(user.name); // Output: null
console.log(typeof null); // Output: "object" (a historical quirk)
Key Differences Summary
| Characteristic | undefined | null |
|---|---|---|
| Meaning/Intent | Value not assigned; variable declared but no value yet; non-existent property/return. | Intentional absence of any object value; explicitly 'nothing'. |
| How it arises | By default (e.g., uninitialized variables, missing function returns, non-existent properties). | Explicitly assigned by the programmer. |
| Typeof operator | 'undefined' | 'object' (a historical bug, not truly an object). |
| Equality (==) | Equal to `null` (`null == undefined` is `true`). | Equal to `undefined` (`null == undefined` is `true`). |
| Strict Equality (===) | Not strictly equal to `null` (`undefined === null` is `false`). | Not strictly equal to `undefined` (`null === undefined` is `false`). |
| Truthiness | Falsy | Falsy |
In essence, undefined is a state where a value is not present due to default JavaScript behavior, while null is an assignment that explicitly indicates the absence of an object value, making it a deliberate choice by the developer.