###なんで明らかに存在するって断言できるの?
console.log(userData.fav); //{word:[...]}
console.log(userData.fav.word); //undefined
あれ...存在しているはずじゃん??
###原因
Chromeのconsoleはどうやらconsoleの▶を開いて詳細を確認しようとした時点での状態を表示するようです。つまり実際にはuserData.favは{}であるのにも関わらず、その0.00001s後にwordプロパティが追加された場合consoleを確認するときにはすでにプロパティが存在しています。
つまり
console.log(userData.fav);を「実行した」とき、プロパティは存在しない。
↓
console.log(userData.fav.word);を「実行した」とき、プロパティは存在しないのでundefinedを返す
↓
開発者がconsoleを開いてconsole.log(userData.fav);の表示結果を「確認する」とき、すでにプロパティwordが追加されたのでconsoleに表示される。
なのでPCがプロパティを追加するのよりも先にconsole画面で表示させれば{}と表示されるはずです。
ちなみに▶をクリックして展開する必要のないundefinedのような文字列は一度表示されたら変更されることはありませんが▶{__ ob __: Observer}のように展開する必要があるものは中身を確認した時点の状態を返すようです。