code: function keys(object) {
          var isProto = isPrototype(object);
          if (!(isProto || isArrayLike(object))) {
            return baseKeys(object);
          }
          var indexes = indexKeys(object), skipIndexes = !!indexes, result = indexes || [], length = result.length;
          for (var key in object) {
            if (baseHas(object, key) && !(skipIndexes && (key == 'length' || isIndex(key, length))) && !(isProto && key == 'constructor')) {
              result.push(key);
            }
          }
          return result;
        }
docs: Creates an array of the own enumerable property names of `object`.
  
  **Note:** Non-object values are coerced to objects. See the
  [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)
  for more details.
  
  @static
  @memberOf _
  @category Object
  @param {Object} object The object to query.
  @returns {Array} Returns the array of property names.
  @example
  
  function Foo() {
  this.a = 1;
  this.b = 2;
  }
  
  Foo.prototype.c = 3;
  
  _.keys(new Foo);
  // => ['a', 'b'] (iteration order is not guaranteed)
  
  _.keys('hi');
  // => ['0', '1']