# The Trouble with Dots
In many dynamic languages, you can access parts of structures like Objects, Arrays, and class instances through ., the dot operator. Normally that works great:
const person = {
    firstName: 'Jesse',
    lastName: 'Warden',
    age: 39,
    address: {
        home: {
            street: '007 Cow Lane',
            phone: ['123-456-7890']
        },
        work: {
            street: '123 Work Blvd'
        }
    }
}
To access the firstName property on the person, I just use a dot accessor:
console.log(person.firstName) // Jesse
If you misspell a property, no worries:
console.log(person.fistName) // undefined
If you misspell the object, though:
console.log(persn.fistName) // ReferenceError: persn is not defined
The second comes from accessing a sub property you THINK exists, but doesn't such as misspelling home to hom:
console.log(person.address.hom.street) // TypeError: Cannot read property 'street' of undefined
You spelled street right. However, you could of spelled it wrong. Either way, what the error MEANT to say was: "There is no hom property on person.address, perhaps you meant home?".
As you see, reading data through dots is dangerous. These errors are with a known Object. Often you're dealing with data that isn't known, coming from external sources like REST calls, text files, databases, etc. These are side effects that you can't control.