code: function shimKeys(object) {
        var keyIndex,
            index = -1,
            props = keysIn(object),
            length = props.length,
            objLength = length && object.length,
            maxIndex = objLength - 1,
            result = [];
  
        var allowIndexes = typeof objLength == 'number' && objLength > 0 &&
          (isArray(object) || (support.nonEnumArgs && isArguments(object)));
  
        while (++index < length) {
          var key = props[index];
          if ((allowIndexes && (keyIndex = +key, keyIndex > -1 && keyIndex <= maxIndex && keyIndex % 1 == 0)) ||
              hasOwnProperty.call(object, key)) {
            result.push(key);
          }
        }
        return result;
      }
docs: 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 inspect.
  @returns {Array} Returns the array of property names.