【javsScript】封装可以分辨所有数据类型的方法 全面分析不同数据类型之间的操作问题

前言:ECMAScript有5中简单数据类型(也称为基本数据类型):Undefined,Null,Boolean,Number和String。还有一种复杂数据类型:object 。而用typeof操作符去分辨这些数据类型是件很让人奔溃的事情。

一、typeof检测数据

var obj = {};
var str = 'string';
var num = 123;
var bool = true;
var arr = [];
var reg = /a-z/;
var fn = function(){};
var obj_null = null;
var undf = undefined;

console.log(typeof obj);		//object
console.log(typeof str);		//string
console.log(typeof num);		//number
console.log(typeof bool);		//boolean
console.log(typeof arr);		//object
console.log(typeof reg);		//object
console.log(typeof fn);			//function
console.log(typeof obj_null);	//object
console.log(typeof obj_undf);	//undefined

这时,除了对象输出的是'object'外,还有数组输出的也是'object',正则reg输出的也是'object',null输出的也是'object'。

二、检测new创建数据类型

var obj2 = new Object();
var obj_str = new String('string');
var obj_num = new Number();
var obj_bool = new Boolean();
var obj_arr = new Array();
var obj_reg = new RegExp();
var obj_fn = new Function();
var obj_date = new Date();

console.log(typeof obj2);		//object
console.log(typeof obj_str);	//object
console.log(typeof obj_num);	//object
console.log(typeof obj_bool);	//object
console.log(typeof obj_arr);	//object
console.log(typeof obj_reg);	//object
console.log(typeof obj_fn);		//function
console.log(typeof obj_date);	//object

这时,除了obj_fn,即通过new Funciton()创建的输出的是'function'外,其他输出的全是'object'。这令人很头疼。

三、封装可以分辨所有数据类型的方法

var typeName = {
	'[object Function]': 'function',
	'[object Boolean]': 'boolean',
	'[object Number]': 'number',
	'[object String]': 'string',
	'[object Object]': 'object',
	'[object RegExp]': 'regExp',
	'[object Array]': 'array',
	'[object Error]': 'error',
	'[object Date]' : 'date'	
};
var toStringFn = Object.prototype.toString;    //获取到对象的toString方法
//通过call 引用toString方法。

function checkType(obj){
	if( obj == null ){
		return String( obj );	//js自带的的String方法,用于检测null和undefined
	}	
	//safari5及之前版本,Chrome7, typeof RegExp返回的是function
	return typeof obj ==='object' || typeof obj === "function" ?
		   typeName[toStringFn.call(obj)]:typeof obj;        
}

用checkType检测数据类型

var obj = {};
var str = 'string';
var num = 123;
var bool = true;
var arr = [];
var reg = /a-z/;
var fn = function(){};
var obj_null = null;
var undf = undefined;

var obj2 = new Object();
var obj_str = new String('string');
var obj_num = new Number();
var obj_bool = new Boolean();
var obj_arr = new Array();
var obj_reg = new RegExp();
var obj_fn = new Function();
var obj_date = new Date();

console.log(checkType(obj));		//object
console.log(checkType(str));		//string
console.log(checkType(num));		//number
console.log(checkType(bool));		//boolean
console.log(checkType(arr));		//array
console.log(checkType(reg));		//regExp
console.log(checkType(fn));			//function
console.log(checkType(obj_null));	//null
console.log(checkType(obj_undf));	//undefined
console.log('-----------------------分界线');
console.log(checkType(obj2));		//object
console.log(checkType(obj_str));	//string
console.log(checkType(obj_num));	//number
console.log(checkType(obj_bool));	//boolean
console.log(checkType(obj_arr));	//array
console.log(checkType(obj_reg));	//regExp
console.log(checkType(obj_fn));		//function
console.log(checkType(obj_date));	//date

这时就可以清晰的检测所有的数据类型了。


相关链接:

全面分析不同数据类型之间的操作问题



猜你喜欢

转载自blog.csdn.net/w390058785/article/details/79961067
今日推荐