The downside is we have to write a bunch of code like this:
Basically, we're checking to see if our object foo which is composed with another object bar has some property named "baz". If it does then it does something with it by passing it to a function. If it doesn't, the whole function call is skipped.
The syntax can be seen on lines 8 and 12. The added question mark is effectively asking "does this object have this property or method on it?" If it does, then it executes. If it doesn't, it returns undefined.
This shortens the amount of code you have to write when dealing with objects that are chained together, and there's potentially no guarantee as the to the structure of an object.