Understanding Typescript symbols `&&`, `||`, `??`, `?.`

In TypeScript, the &&, ||, ??, and ?. operators are used to handle logical operations, nullish coalescing, and optional chaining. Here’s an explanation of each:
1. Logical AND (&&)
The `&& operator is known as the logical AND. It evaluates expressions from left to right and returns the first falsy value it encounters, or the last value if all are truthy.
const a = 1 && 0; // 0
const b = null && 1; // null
const c = "hello" && "world"; // "world"
In these examples:
- a evaluates to
0because1is converted to truthy value while0is falsy value. - b evaluates to
nullbecausenullis a falsy value. - c evaluates to
worldbecause both 'hello' and 'world' are truthy, so it returns the last value.
Practical usage:
- Use the
&&operator to conditionally execute a piece of code only if a certain condition is true.
function Home() {
const [isLoading, setIsLoading] = useState(false);
return isLoading && <p>Loading...</p>;
}
2. Logical OR (||)
The || operator is known as the logical OR. It evaluates expressions from left to right and returns the first truthy value it encounters, or the last value if all are falsy.
const a = undefined || null; // null
const b = null || 1; // 1
const c = "hello" || "world"; // "hello"
In these examples:
- a evaluates to
nullbecause bothundefinedandnullare falsy, so it returns the last value. - b evaluates to
1becausenullis a falsy value. - c evaluates to
hellobecausehellois the first truthy value in the expression.
Practical usage:
- Use the
&&operator to provide a default value for falsy values.
function greet(name) {
const userName = name || "Guest";
console.log(`Hello, ${userName}`);
}
greet('Alice'); // Output: Hello, Alice
greet(''); // Output: Hello, Guest
3. Nullish Coalescing (??)
The ?? operator is known as the nullish coalescing operator, introduced in ECMAScript 2020. Similar to || operator, it returns the value of the right-hand side operand when its left-hand side operand is either null or undefined, but it does not apply for any other falsy values.
const a = undefined ?? "default"; // "default"
const b = 0 ?? 1; // 0
In these examples:
- a evaluates to
defaultbecause the left-hand side operand isundefinedand it returns its right-hand side's value. - b evaluates to
0because0is a falsy value.
4. Optional Chaining (?.)
The ?. operator, also introduced in ECMAScript 2020, is the optional chaining operator. It allows you to safely access deeply nested properties of an object without causing runtime errors.
let user = null;
const address1 = user?.address; // undefined
user = {
address: "123 Main St",
};
const address2 = user?.address; // "123 Main St"
In these examples:
- address1 evaluates to
undefinedbecause user isnulland accessing theaddressproperty returns immediatelyundefinedwithout causing runtim error. - address2 returns the value of the
addressproperty.
Practical usage:
- Combine
?.and??operators to safely access nested properties of the object and provide a default value if none of the values are found.
let user = null;
const address = user?.address ?? "Unknown Address";