# isError
# Description
判断是否为 Error
EvalError
/RangeError
/ReferenceError
/SyntaxError
/TypeError
/URIError
等
# Params
value
# Return
Boolean
# Depend
import getTag from './.internal/getTag.js'
import isObjectLike from './isObjectLike.js'
import isPlainObject from './isPlainObject.js'
# Code
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))
}
# Analyze
调用
isObjectLike
区分null
和其他typeof
为object
的值, 如果为null
则返回false
调用
getTag
获取value
的类型判断
tag == ‘[object Error]’ || tag == ‘[object DOMException]’
并且
typeof value.message == ‘string’
,typeof value.name == ‘string’
, 并且不是一个普通对象!isPlainObject(value)
3,4都满足则为
true
,否则为false
# Remark
DOMException
接口代表调用方法或访问 Web API 属性时发生的异常事件在
Error
和DOMException
中 ,message
和name
都存在默认值(Error.message
默认为''
,Error.name
默认为'Error'
;DOMException.name
为当前错误名称的驼峰命名字符串,如:IndexSizeError
,NotFoundError
等)
# Example
isError(new Error('3')) // true
isError(3) // false