Null (or nil in some languages) represents the intentional absence of a value. It is not zero, it is not an empty string, it is nothing — the deliberate indication that a variable has no value assigned to it yet, or that something doesn't exist.
It sounds simple but null is responsible for an enormous number of bugs and crashes in real programs. Trying to use or access something that is null — calling a method on it, reading a property from it — typically causes your program to crash with a null reference error. This is so common that the inventor of null, Tony Hoare, famously called it his "billion dollar mistake."
The key skill with null handling is learning to check before you use. Most modern languages have developed cleaner ways to handle null gracefully without writing endless if/else checks — things like null coalescing operators, optional chaining, and safe navigation operators. Each language handles this a little differently and knowing the shortcuts will save you a lot of defensive boilerplate code.