Почему обращение к полю объекта через точку выводит undefined, а через квадратные скобки правильное значение?
Потому что переменная field - это динамическая переменная. Чтобы динамически обращаться к свойствам объекта, нужно использовать obj[1][field]
иначе вы у объекта obj[1] ищите свойство field, которого не существует у вашего объекта.
Доступ к свойству через переменную
Квадратные скобки позволяют обратиться к свойству, имя которого хранится в переменной:
var person = {};
person.age = 25;
var key = 'age';
alert( person[key] ); // выведет person['age']Вообще, если имя свойства хранится в переменной (var key = "age"), то единственный способ к нему обратиться – это квадратные скобки person[key].
Доступ через точку используется, если мы на этапе написания программы уже знаем название свойства. А если оно будет определено по ходу выполнения,  то единственный выбор – квадратные скобки.