Лучше проверять `key in b`, а не `typeof b[i] != 'undefined'`, так как значением ключа может быть и undefined
objects = function (a,b) {
var c = {},
key;
for (key in a) {
if (a.hasOwnProperty(key)) {
c[key] = key in b ? b[key] : a[key];
}
}
return c;
}