版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cheng_cuo_tuo/article/details/86559273
<script>
/*
使用typeof能够检测数据的类型,返回值是一个字符串,对于任何变量使用typeof进行检测,得到的只有六种类型,
"number"、"string"、"boolean"、"object"、"function"、"undefined",但是对于null检测的结果是"object"
检测null的一个好的方法是:
function type(o){
return (o == null)? "null" : "object";
}
typeof 不能检测比较复杂的数据类型,以及特殊用途的对象,比如正则表达式、日期类型、数学对象等。对于对象和数组
可以使用constructor属性,该属性值引用的是原来的构造函数。也就是说返回的是一个函数。
值(value) typeof value value.constructor
var value = 1 "number" Number
var value = "a" "string" String
var value = true "boolean" Boolean
var value = {} "object" Object
var value = new Object() "object" Object
var value = [] "object" Array
var value = new Array "object" Array
var value = function(){} "function" Function
var value = className(){} "object" className
使用constructor属性可以判断大部分数据的类型,但是,对于undefined和null特殊值,使用constructor属性,就会抛出异常。
此时,可以先把值转换为布尔值,如果为true,则说明不是undefined和null值,然后再调用constructor属性
数值直接量使用constructor需要将直接两用小括号括起来。
*/
var value = undefined;
alert(typeof(value));//undefined
try {
//出现异常:value is undefined
alert(value.constructor);
}
catch (e) {
alert("Error:" + e.message);
}
alert(value&&value.constructor);
var value = null;
alert(typeof value);//object
alert(value&&value.constructor);//null
alert((10).constructor);//number
alert(typeof((10).constructor));//function
</script>
<script>
/*
使用toString()方法检测对象类型是最安全、最准确的方法。调用toString()方法将对象转换为字符串,然后通过检测字符串中
是否包含数组所特有的标志字符可以确定对象的类型。
toString()方法返回的字符串格式如下[object class],object表示对象的通用类型,class表示对象的内部类型,内部类型
的名称和该对象的构造方法名称对应。
class值提供的信息与对象的constructor属性值相似,但class值是以字符串的形式提供的,而不是以构造函数的形式提供的,
所以在特定环境下非常有用。
但是,要获取对象的class值的唯一方法是必须调用Object定义的默认的toString()方法,因为对象都会预定义自己的toString()
方法,所以不能直接调用对象的toString()方法。例如,日期类Date的toString()方法,返回的是当UTC前时间的字符串形式。
要调用Object对象定义的默认的toString()方法,可以先调用Object.prototype.toString对象的默认toString方法,
在调用该函数的apply()方法在想要检测的对象上执行。
*/
/*
alert(typeof((10).constructor));//function
var d = new Date();
alert(d.toString());
var d = new Date();
var m = Object.prototype.toString;//这里的toString没有括号
alert(m.apply(d));//[Object Date]
*/
//比较完整的数据类型安全检测方法
//参数:o表示检测的值
//返回值:返回字符串"undefined","number", "boolean", "string", "function", "regexp", "array", "date",
// "error", "object", "null"
function typeOf(o){
var _toString = Object.prototype.toString;
//获取对象的toString()方法
//列举基本数据类型和内置对象类型,可以进一步补充数组的检测数据的范围
var _type = {
"undefined" : "undefined",
"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.apply(o)] || (o ? "object" : "null");
}
var a = Math.abs;
alert(typeOf(a)); //function
</script>