为什么lodash.isError需要存在?

时间:2019-02-21 21:39:32

标签: javascript lodash

Lodash提供了一种称为_.isError的方法。为什么我们需要使用该方法而不是val instanceof Error

如果您查看来源,则会看到:

    function isError(value) {
      if (!isObjectLike(value)) {
        return false;
      }
      var tag = baseGetTag(value);
      return tag == errorTag || tag == domExcTag ||
        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));
    }

我不确定这种复杂性会在什么情况下处理val instanceof Error不能解决的问题。

1 个答案:

答案 0 :(得分:1)

这有点人为,但这是_.isError(val)val instanceof Error出现分歧的地方:

(假设<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.11/lodash.min.js"></script>在html中)

function Foo() {
    this.message="a";
    this.name="a";
}
_.isError(new Foo) // true
new Foo instanceof Error // false

我不能说这是否是他们的预期行为,但这是lodash方法处理额外复杂性的地方。