js 中判断类型
js中常用有三种判断类型的方式,但 都有优缺点。
typeof 判断 js的类型
优点
可以判断一些简单类型,比如undefined.
缺点:无法判断 null 的类型,也无法完整判断数字
typeof( null ) == 'object' // true
instanceof 判断 已知 js 的类型
这个判断类型用的比较少,一般来说都只能判断已知js的类型
Object instanceof Object // true
Function instanceof Function // true
object.prototype.tostring 判断js的类型
这个在项目中比较常见,判断方法比较全,贴一波封装后的代码
class JsType {
constructor(){
this.isType = Object.prototype.toString;
}
isArray( arr ) { // 判断数组
return this.isType.call( arr ) === '[object Array]' ;
}
checkNaN ( obj ) { // 判断 nan
return obj !== obj;
}
isNumber( num ) { //判断number
let res = false;
let type = this.isType.call( num );
if ( type == '[object Number]') {
res = true;
} else if ( !( this.checkNaN( Number(num) )) ){
return this.isType.call( Number(num) ) === '[object Number]';
}
return res;
}
isFunction( fn ) { // 判断 fn
return this.isType.call( fn ) === '[object Function]';
}
isString( str ) {
return this.isType.call( str ) === '[object String]';
}
isReg( reg ) {
return this.isType.call( reg ) === '[object RegExp]';
}
isUndefined( str ) {
return this.isType.call( str ) === '[object Undefined]';
}
isObject( obj ) {
return this.isType.call( obj ) === '[object Object]';
}
isNull ( obj ) {
return this.isType.call( obj ) === '[object Null]';
}
isDate( date ) {
return this.isType.call(date) === '[object Date]';
}
}