_baseIteratee.js
 1  var baseMatches = require('./_baseMatches'),
 2      baseMatchesProperty = require('./_baseMatchesProperty'),
 3      identity = require('./identity'),
 4      isArray = require('./isArray'),
 5      property = require('./property');
 6  
 7  /**
 8   * The base implementation of `_.iteratee`.
 9   *
10   * @private
11   * @param {*} [value=_.identity] The value to convert to an iteratee.
12   * @returns {Function} Returns the iteratee.
13   */
14  function baseIteratee(value) {
15    // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
16    // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
17    if (typeof value == 'function') {
18      return value;
19    }
20    if (value == null) {
21      return identity;
22    }
23    if (typeof value == 'object') {
24      return isArray(value)
25        ? baseMatchesProperty(value[0], value[1])
26        : baseMatches(value);
27    }
28    return property(value);
29  }
30  
31  module.exports = baseIteratee;