Lots of answers, but I guess you want to check for own properties of the object:
for (var p in obj) {
if (obj.hasOwnProperty(p)) {
// obj has at least one enumerable own property
}
}
But note that in ES5, objects can be constructed with non–enumerable own properties:
function hasEnumerableOwnProperties(obj) {
for (var p in obj) {
if (obj.hasOwnProperty(p)) return true;
}
return false;
}
var obj = {}
Object.defineProperty(obj, 'foo', {enumerable:false, value:'foo'})
console.log(hasEnumerableOwnProperties(obj) + ':' + obj.foo); // false:foo
Javascript isn't designed to suit this kind of analysis, it's much better if you're after a particular property, feature or attribute to test for it specifically (i.e. use feature detection).
Don't try to infer some general behaviour based on a simple (often inconclusive) test (duck typing).