Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

lodash源码分析之isError #223

Open
HeftyKoo opened this issue May 1, 2020 · 0 comments
Open

lodash源码分析之isError #223

HeftyKoo opened this issue May 1, 2020 · 0 comments
Labels
api 暴露出来的接口 系列文章

Comments

@HeftyKoo
Copy link
Owner

HeftyKoo commented May 1, 2020

本文为读 lodash 源码的第二百二十二篇,后续文章会更新到这个仓库中,欢迎 star:pocket-lodash

gitbook也会同步仓库的更新,gitbook地址:pocket-lodash

依赖

import getTag from './.internal/getTag.js'
import isObjectLike from './isObjectLike.js'
import isPlainObject from './isPlainObject.js'

《lodash源码分析之数据类型获取的兼容性》

《lodash源码分析之isObjectLike》

《lodash源码分析之isPlainObject》

源码分析

isError 用来判断一个值是否为 Error 对象。

源码如下:

function isError(value) {
  if (!isObjectLike(value)) {
    return false
  }
  const tag = getTag(value)
  return tag == '[object Error]' || tag == '[object DOMException]' ||
    (typeof value.message === 'string' && typeof value.name === 'string' && !isPlainObject(value))
}

Error 肯定是一个对象,因此如果不能通过 isObjectLike 检测,返回 false

接下来检测 valueTag 是否为 [object Error] 或者 [object DOMException] 这两种常见的 Error 对象,如果是,返回的也是 true

如果通过 Tag 检测不出来,则判断 messagename 是否为 string ,因为 Error 对象一般都会有这两个属性,并且一般都为 string 类型,并且 value 不能为纯对象,如果满足这三个条件,也认为是 Error 对象,当然,这并不严谨。

License

署名-非商业性使用-禁止演绎 4.0 国际 (CC BY-NC-ND 4.0)

最后,所有文章都会同步发送到微信公众号上,欢迎关注,欢迎提意见:

作者:对角另一面

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
api 暴露出来的接口 系列文章
Projects
None yet
Development

No branches or pull requests

1 participant