Skip to content

Instantly share code, notes, and snippets.

@rubinchyk
Last active August 27, 2017 09:07
Show Gist options
  • Select an option

  • Save rubinchyk/a1ea5b70b3334f2c90a9c32e4f9ae0a2 to your computer and use it in GitHub Desktop.

Select an option

Save rubinchyk/a1ea5b70b3334f2c90a9c32e4f9ae0a2 to your computer and use it in GitHub Desktop.
[is Array or Object empty?] JavaScript: is Array or Object empty? #JavaScript
// Speed up calls to hasOwnProperty
var hasOwnProperty = Object.prototype.hasOwnProperty;
function isEmpty(obj) {
// null and undefined are "empty"
if (obj == null) return true;
// Assume if it has a length property with a non-zero value
// that that property is correct.
if (obj.length > 0) return false;
if (obj.length === 0) return true;
// If it isn't an object at this point
// it is empty, but it can't be anything *but* empty
// Is it empty? Depends on your application.
if (typeof obj !== "object") return true;
// Otherwise, does it have any properties of its own?
// Note that this doesn't handle
// toString and valueOf enumeration bugs in IE < 9
for (var key in obj) {
if (hasOwnProperty.call(obj, key)) return false;
}
return true;
}
/**
Examples:
isEmpty(""), // true
isEmpty(33), // true (arguably could be a TypeError)
isEmpty([]), // true
isEmpty({}), // true
isEmpty({length: 0, custom_property: []}), // true
isEmpty("Hello"), // false
isEmpty([1,2,3]), // false
isEmpty({test: 1}), // false
isEmpty({length: 3, custom_property: [1,2,3]}) // false
If you only need to handle ECMAScript5 browsers, you can use Object.getOwnPropertyNames instead of the hasOwnProperty loop:
if (Object.getOwnPropertyNames(obj).length > 0) return false;
**/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment