1)、通常在检测JavaScript中类型的时候都是使用typeof运算符,然后返回一个识别运算数类型的字符串,对于任何的变量来说,使用typeof 运算符返回结果只有6中类型
1、number 2、string 3、boolean 4、object 5、function 6 、undefined。 但是在大家可以试试在使用typeof检测null值的时候,返回的是object,这个有点不适合,大家想,null应该是没有类型的说法的,所以一般人在处理null的类型判断都是做一个方法
function type(oo){
return (oo ==null) ? "null":(typeof oo);
}
2)、但是typeof 不能够检测复杂的数据类型的,比如表达式对象,日期对象,数学对象。
它只能够返回一个object类型,并不能知道具体到日期什么的,
javascript中一种判断数据类型的方法,constructor属性,使用方法是
var value=underfined;
alert(value.constructor);
但是数值直接量是不能这样用的 ,需要添加一个小括号,这样的话,小括号运算符能把数值直接量转换为对象,有点像Java中的Integer 和 int 类型一样,
alert((30).constructor)
3)、使用toString()方法也是可以检测对象类型,而且是最准确的,通常在是把对象转成字符串,然后检测下字符串中是否包含了数组所特有的标准字符,
返回的字符串形式如下
[object calss]
object 是通用类型,那么class 表示对象的内部类型,内部类型的名称与该对象的的构造函数名是对应的,比如Array对象的class 是Array,Date对象的class “Date”
具体写法如下,
var date = new Date();
alert(typeof date);
var m=Object.prototype.toString;
alert(m.apply(date));
奉献一段通用的类型检测代码
function type(o){
var _toString = Object.prototype.toString;
var _type ={
"underfined":"underfined",
"number":"number",
"boolean":"boolean",
"string":"string",
''[object Function] ":"function",
''[object RegExp] ":"RegExp",
''[object Array] ":"Array",
''[object Date] ":"Date",
''[object Error] ":"Error"
}
return _type[typeof o] || _type[_toString.call(o)] || (o?"object":"null")
}