Безопасное получение свойств вложенных объектов

Доступ к свойствам вложенных объектов через «.» или «[]» опасен тем, что если в цепочке не будет указанного объекта, то будет выброшено исключение.


var obj = {a: {b: {c: 42} } };
obj.a.x.y;

TypeError: Cannot read property ‘y’ of undefined

От таких ситуаций можно обезопаситься, если воспользоваться простой функцией.


function getProperty(obj, prop) {
  return prop.split('.')
    .reduce(function (m, i) {
      return m && typeof m == 'object' ? m[i] : null;
    }, obj);
}

var obj = {a: {b: {c: 42} } };
getProperty(obj, 'a.x.y');

null