What’s the difference between undeclared, undefined and null in JavaScript?

undeclared

A variable is undeclared if it has not been declared with an appropriate keyword (i.e. var, let or const). Accessing an undeclared variable will throw a ReferenceError.

console.log(x); // ReferenceError: x is not defined

undefined

A variable is undefined if it hasn’t been assigned a value. undefined is a primitive data type in JavaScript and represents the absence of a value, intentional or otherwise.

let x;
console.log(x); // undefined

null

A variable is assigned a value of null like any other value. null is also primitive data type in JavaScript and always represents the intentional absence of a value.

let x = null;
console.log(x); // null

Checking for empty states

Undeclared variables will throw an error, which makes them easy to spot and are not very common anyways. undefined and null can be easily spotted with a conditional as they are both falsy values. Due to that, null and undefined are loosely equal (==), but not strictly equal (===).