Optional chaining can be really useful to help with potential errors when accessing a property of an object. It allows you to access a property deep within an object without risking an error if one of the properties is nullish (null
or undefined
).
Optional chaining is used to access a property that may or may not exist.
Optional Chaining (objects)
The syntax is to use dot notation but with a ?
in front of the dot. Here's an example:
const user = {
name: 'Joe',
age: 27,
settings: {
theme: {
mode: 'dark',
text: '#d7e0ff',
background: '#f87070',
font: 'Kumbh Sans, sans-serif'
},
},
friends: ['Brandon', 'Brian', 'Isaac'],
}
console.log(user?.settings?.theme) /* => { mode: 'dark', text:
'#d7e0ff', background: '#f87070', font: 'Kumbh Sans, sans-serif' }
*/
Optional Chaining (arrays)
The benefit of optional chaining on an array is that if the results were null or undefined, your code won't break. It will short-circuit and return undefined.
const user = {
name: 'Joe',
age: 27,
settings: {
theme: {
mode: 'dark',
text: '#d7e0ff',
background: '#f87070',
font: 'Kumbh Sans, sans-serif'
},
},
friends: ['Brandon', 'Brian', 'Isaac'],
}
/*
// variable to hold the data
let firstArrayValue = '';
// instead of using an if condition
if (user.friends) {
firstArrayValue = user?.friends?.[0];
}
*/
// use optional chaining
const firstArrayValue = user?.friends?.[0]
console.log(firstArrayValue) // => 'Brandon'
Important notes
- You can only use optional chaining on an object that exists.
- Optional chaining is only used for reading. It cannot be used for assignment.
// profile is not defined
console.log(profile?.settings?.theme)
// Syntax error (Optional chaining cannot appear in left-hand side)
user?.settings?.theme = 'light'
Top comments (0)