# 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