1 var isArguments = require('../lang/isArguments'),
2 isArray = require('../lang/isArray'),
3 isIndex = require('./isIndex'),
4 isLength = require('./isLength'),
5 keysIn = require('../object/keysIn');
7 /** Used for native method references. */
8 var objectProto = Object.prototype;
10 /** Used to check objects for own properties. */
11 var hasOwnProperty = objectProto.hasOwnProperty;
14 * A fallback implementation of `Object.keys` which creates an array of the
15 * own enumerable property names of `object`.
18 * @param {Object} object The object to query.
19 * @returns {Array} Returns the array of property names.
21 function shimKeys(object) {
22 var props = keysIn(object),
23 propsLength = props.length,
24 length = propsLength && object.length;
26 var allowIndexes = !!length && isLength(length) &&
27 (isArray(object) || isArguments(object));
32 while (++index < propsLength) {
33 var key = props[index];
34 if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {
41 module.exports = shimKeys;