isError.js
 1  var baseGetTag = require('./_baseGetTag'),
 2      isObjectLike = require('./isObjectLike'),
 3      isPlainObject = require('./isPlainObject');
 4  
 5  /** `Object#toString` result references. */
 6  var domExcTag = '[object DOMException]',
 7      errorTag = '[object Error]';
 8  
 9  /**
10   * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,
11   * `SyntaxError`, `TypeError`, or `URIError` object.
12   *
13   * @static
14   * @memberOf _
15   * @since 3.0.0
16   * @category Lang
17   * @param {*} value The value to check.
18   * @returns {boolean} Returns `true` if `value` is an error object, else `false`.
19   * @example
20   *
21   * _.isError(new Error);
22   * // => true
23   *
24   * _.isError(Error);
25   * // => false
26   */
27  function isError(value) {
28    if (!isObjectLike(value)) {
29      return false;
30    }
31    var tag = baseGetTag(value);
32    return tag == errorTag || tag == domExcTag ||
33      (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));
34  }
35  
36  module.exports = isError;