在判断javascript中某个变量的类型时,以前用 typeof,但是发现typeof不能判断 Array类型,其返回是一个object,后来又用obj.constructor来判断,这下比较准确,于是决定constructor也有可能判断某个对象的类型,比 fucntion class1(d){//...} var d=new class1(1); 是否用constructor也能判断d就是class1呢?
经过测试,不能完全判断。
? 何谓不能完全判断呢?
如果写成
var class1=function(){}
类的形式,然后 var c=new class1(); // c.constructor==function
如果写成
function class1(){}
的形式,然后 var c=new class1();// c.constructor==class1
这下可麻烦了,在javascript中不能可能规定一个类(function)的写法一定是某一个中型式的。
所以,判断某个对象是某个自定义类型,目前还是没有好的办法判断!!
当然 javascript中判断某个类型有一个通用的办法,就是看某个对象是否具有某个类的属性或者方法,如要判断一个对象是数组 if(a.join)就可以了,但是还是不喜欢这样的做法!
从网上搜了一下,觉得下面的判断类型还是比较好的,于是摘抄过来,对其判断是否是对象不敢苟同,觉得也没有这个必要。
1 判断是否为数组类型
<script type="text/javascript">
//<![CDATA[
var a=[0];
document.write(isArray(a),'<br/>');
function isArray(obj){
return (typeof obj=='object')&&obj.constructor==Array;
}
//]]>
</script>
2 判断是否为字符串类型
<script type="text/javascript">
//<![CDATA[
document.write(isString('test'),'<br/>');
document.write(isString(10),'<br/>');
function isString(str){
return (typeof str=='string')&&str.constructor==String;
}
//]]>
</script>
3 判断是否为数值类型
<script type="text/javascript">
//<![CDATA[
document.write(isNumber('test'),'<br/>');
document.write(isNumber(10),'<br/>');
function isNumber(obj){
return (typeof obj=='number')&&obj.constructor==Number;
}
//]]>
</script>
4 判断是否为日期类型
<script type="text/javascript">
//<![CDATA[
document.write(isDate(new Date()),'<br/>');
document.write(isDate(10),'<br/>');
function isDate(obj){
return (typeof obj=='object')&&obj.constructor==Date;
}
//]]>
</script>
5 判断是否为函数
<script type="text/javascript">
//<![CDATA[
document.write(isFunction(function test(){}),'<br/>');
document.write(isFunction(10),'<br/>');
function isFunction(obj){
return (typeof obj=='function')&&obj.constructor==Function;
}
//]]>
</script>
6 判断是否为对象
<script type="text/javascript">
//<![CDATA[
document.write(isObject(new Object()),'<br/>');
document.write(isObject(10),'<br/>');
function isObject(obj){
return (typeof obj=='object')&&obj.constructor==Object;
}
//]]>
</script>
判断对是否是对象就没有必要了。
增加一个判断是否为null
function isNULL(obj){
return obj===null || !obj ||typeof obj=='undefine';
}
综上,得到判断类型的函数工具包:
type={
isString:function(obj){
return typeof str=='string';
},
isNumber:function(obj){
return typeof obj=='number';
},
isFunction:function(obj){
return typeof obj=='function';
},
isBoolean:function(obj){
reurn typeof obj == 'boolean';
},
isNull:function(obj){
return obj==null ||typeof obj=='undefined';
},
isDate:function(obj){
return (typeof obj=='object')&&obj.constructor==Date;
},
isArray:function(obj){
return (typeof obj=='object')&&obj.constructor==Array;
}
}