| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- var isArguments = require('../lang/isArguments'),
- isArray = require('../lang/isArray'),
- isIndex = require('./isIndex'),
- isLength = require('./isLength'),
- keysIn = require('../object/keysIn');
- /** Used for native method references. */
- var objectProto = Object.prototype;
- /** Used to check objects for own properties. */
- var hasOwnProperty = objectProto.hasOwnProperty;
- /**
- * A fallback implementation of `Object.keys` which creates an array of the
- * own enumerable property names of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names.
- */
- function shimKeys(object) {
- var props = keysIn(object),
- propsLength = props.length,
- length = propsLength && object.length;
- var allowIndexes = !!length && isLength(length) &&
- (isArray(object) || isArguments(object));
- var index = -1,
- result = [];
- while (++index < propsLength) {
- var key = props[index];
- if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {
- result.push(key);
- }
- }
- return result;
- }
- module.exports = shimKeys;
|