Javascript中常见类型对象有:
Boolean, Number, String, Function, Array, Date, RegExp, Object, Error, Symbol等等.
下面提供区分这几种类型的工具方法,前提是使用javascript,如果项目中使用了jquery或者angularjs等框架,就没必要自己再写这样的工具函数。
第一种:最笨的办法,一一列举
function isBoolean(value) { return typeof value === 'boolean'; } function isNumber(value) { return typeof value === 'number'; } function isString(value) { return typeof value === 'string'; } function isFunction(value) { return typeof value === 'function'; } var isArray = Array.isArray; function isDate(value) { return toString.call(value) === '[object Date]'; } function isRegExp(value) { return toString.call(value) === '[object RegExp]'; } function isObject(value) { return value !== null && typeof value === 'object'; } function isUndefined(value) { return typeof value === 'undefined'; } function isDefined(value) { return typeof value !== 'undefined'; } function isBlankObject(value) { return value !== null && typeof value === 'object' && !getPrototypeOf(value); } function isFile(obj) {return toString.call(obj) === '[object File]';} function isFormData(obj) {return toString.call(obj) === '[object FormData]';} function isBlob(obj) {return toString.call(obj) === '[object Blob]';} function isWindow(obj) {return obj && obj.window === obj;} |
---|
这样看下来,这些方法其实就是利用 typeof和toString方法,在外面定义一个function而已,也不叫封装,也没必要封装。
使用时,直接用就可以。那如果说在使用时,不知道什么时候用typeof,什么时候用toString。
很简单嘛,直接拷贝上面代码(坏笑)。要记住这么多方法名也还挺不容易的,哦?有规律,类别首字母大写,前面加"is"。
第二种,jQuery式封装,定义一个统一接口
这种方法相对于上面的方法,就简单太多了。
想要知道某个对象是什么类型,调用type()方法。
想要知道某个对象是不是某类型,使用type() ==='某类型的小写字符串',例如:type() ==='string' 或者 type() ==='array'
var class2type = {}; "Boolean Number String Function Array Date RegExp Object Error Symbol" .split( " " ) .forEach(function(element,index){ class2type[ "[object " element "]" ] = element.toLowerCase(); }); function type(obj) { if ( obj == null ) { return obj ""; } return typeof obj === "object" || typeof obj === "function" ? class2type[ toString.call( obj ) ] || "object" : typeof obj; } |
---|