Create a gist now

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Javascript: Object keys polyfill
/**
* Polyfill for Object.keys
*
* @see: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/keys
*/
if (!Object.keys) {
Object.keys = (function () {
var hasOwnProperty = Object.prototype.hasOwnProperty,
hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'),
dontEnums = [
'toString',
'toLocaleString',
'valueOf',
'hasOwnProperty',
'isPrototypeOf',
'propertyIsEnumerable',
'constructor'
],
dontEnumsLength = dontEnums.length;
return function (obj) {
if (typeof obj !== 'object' && typeof obj !== 'function' || obj === null) throw new TypeError('Object.keys called on non-object');
var result = [];
for (var prop in obj) {
if (hasOwnProperty.call(obj, prop)) result.push(prop);
}
if (hasDontEnumBug) {
for (var i=0; i < dontEnumsLength; i++) {
if (hasOwnProperty.call(obj, dontEnums[i])) result.push(dontEnums[i]);
}
}
return result;
}
})()
};
@austinhinderer

This comment has been minimized.

Show comment
Hide comment
@austinhinderer

austinhinderer May 20, 2014

What license is this code available under? BSD? MIT? Apache?

austinhinderer commented May 20, 2014

What license is this code available under? BSD? MIT? Apache?

@m93a

This comment has been minimized.

Show comment
Hide comment

m93a commented Feb 8, 2015

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment