How can I use optional chaining with arrays and functions?
To safely access array elements or invoke functions use ?..
Array element access:
Function invocation:
Optional chaining (?.) is a feature in JavaScript to safely access nested object properties and invocations if any in the chain can possibly produce undefined or null.
Key scenarios and usage
Safely traversing object properties
Optional chaining allows you to delve down into deeply nested property paths without the fear of causing a runtime error:
Guarded function invocation
Use optional chaining when calling functions at uncertain places to avoid a runtime error:
Array elements retrieval
Retrieving items from an array especially after handling methods like filter (that always return an array) just became error-free:
Handling React components and hooks
Perform status checks in your React hooks or on uncertain props with more confidence:
Do's and don'ts
There are a few best practices and caveats worth remembering with optional chaining:
- Resistance to excessive use: Reduces readability and bypasses potential structural issues in your code.
- Runtime errors: JS won't blow a whistle for out-of-bounds array access. Just when you attempt to use the resultant object.
- Handle with care: Be mindful of functions with side effects when using optional chaining.
- Verify compatibility: Check for support in your target environment because not all JavaScript engines run optional chaining smoothly (I'm looking at you, IE!).
Power-up with optional chaining
For advanced usage, let's explore some scenarios:
Combination with nullish coalescing
Optional chaining and nullish coalescing (??) together can be a dynamic duo, helping assign default values when a nullish value (null or undefined) is encountered:
Existence verification for method invocation
Optional chaining shortens and simplifies your code when verifying the existence of methods:
Nested array values retrieval
Avoid undefined monstrosities when dealing with multidimensional arrays:
Dynamic property access
Flexible enough for dynamic property access as well:
Was this article helpful?