if we do just `!obj` it would try to access properties of any *truthy* value (eg. `get({a:{b:true}}, 'a.b.c')` would access property `c` of `true`).. to keep the behavior consistent we need to check if value is object-like (empty strings, false and zero are *falsy*)