# 此页面贡献者:年轻的小铲
储备知识
typeof 操作符
对于基本类型,除 null 以外,均可以返回正确的结果。
但是如果用 new 操作符来创建基本数据类型的实例时,typeof 判断为 object
对于引用类型,除 function 以外,一律返回 object 类型。
对于 null ,返回 object 类型。
constructor 属性
除 null 和 undefined ,可以调用变量的 constructor 属性判断类型。
但是,constructor 属性不稳定,有可能被开发者重写
toString 方法
- 对变量调用该方法,默认返回其内部属性 [[Class]] ,格式为 [object Xxx] ,其中 Xxx 就是对象的类型。
代码参考
工具函数:
function checkType (value) {
return toString.call(value)
}
/**
* Checks if `value` is object-like. A value is object-like if it's not `null`
* and has a `typeof` result of "object".
*/
function isObjectLike(value) {
return typeof value == 'object' && value !== null
}
- 判断
Stirng
function isString(value) {
const type = typeof value
return type == 'string' || (type == 'object' && value != null && !Array.isArray(value) && checkType(value) == '[object String]')
}
- 判断
Number
function isNumber(value) {
return typeof value == 'number' || (isObjectLike(value) && checkType(value) == '[object Number]')
}
- 判断
Boolean
function isBoolean(value) {
return value === true || value === false || (isObjectLike(value) && checkType(value) == '[object Boolean]')
}
- 判断
Null
function isNull(value) {
return value === null
}
- 判断
Undefined
function isUndefined(value) {
return value === undefined
}
- 判断
Object
function isObject(value) {
const type = typeof value
return value != null && (type == 'object' || type == 'function')
}
- 判断
Function
function isFunction(value) {
if (!isObject(value)) {
return false
}
const tag = checkType(value)
return tag == '[object Function]' || tag == '[object AsyncFunction]' || tag == '[object GeneratorFunction]' || tag == '[object Proxy]'
}
- 判断
Array
// ie9+
function isArray (value) {
return Array.isArray(value)
}
- 判断
Date
function isDate (value) {
return isObjectLike(value) && checkType(value) == '[object Date]'
}
- 判断
RegExp
function IsRegExp (value) {
return isObjectLike(value) && checkType(value) == '[object RegExp]'
}