Javascript 的 typeof可以获取变量的类型,有如下6种返回值:
1)number;
2)string;
3)boolean;
4)object
5)function;
6)undefined.
javascript判断变量类型的自定义函数
通常用typeof来判断js变量的类型,但很多时候仅仅typeof满足不了要求的。
我写了一个自定义函数来做这个事,判断的比较全面了, 存为typeof_extend.js。
function varType(v){
if(typeof v==="object"){
if(v===null)return 'null';
if(v.constructor)
return (v.constructor.toString()).match(/(?: )[\w\$]+/)[0];
if(typeof typeof2==='undefined' && window.execScript){
window.execScript('Function vbsTypeName(o):vbsTypeName=TypeName(o):End Function','vbscript');
window.execScript('function typeof2(o){return vbsTypeName(o)}','jscript');
}
if(typeof typeof2!=='undefined'){
return typeof2(v);
}
return "object";
}
return typeof v;
}
//对于普通js常量和js对象,各浏览器是基本一致的
console.log(varType()); //undefined
console.log(varType(100)); //number
console.log(varType({})); //Object
console.log(varType([])); //Array
console.log(varType(/ /)); //RegExp
console.log(varType(new Date())); //Date
console.log(varType(Date)); //function
console.log(varType(Object)); //function
console.log(varType(RegExp)); //function
//对于DOM对象,各浏览器可能会有不同值
console.log(varType(window)); //IE:HTMLWindow2 FF:Window
console.log(varType(document)); //IE:HTMLDocument FF:HTMLDocument
console.log(varType(document.body)); //IE:HTMLBody FF:HTMLBodyElement
console.log(varType(Option)); //IE:Object FF:function
console.log(varType(Image)); //IE:Object FF:function
console.log(varType(navigator)); //IE:DispHTMLNavigator FF:Navigator
//以下几个只适用于IE,其他内核浏览器不支持
if(!!window.VBArray){
console.log(varType(ActiveXObject)); //IE:function
console.log(varType(Enumerator)); //IE:function
console.log(varType(new ActiveXObject("Scripting.Dictionary"))); //IE:Dictionary
console.log(varType(new Enumerator())); //IE:Enumerator
}
将其放到html中,名为,代码如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>cookie生成测试</title>
</head>
<body>
<script type='text/javascript' src='http://www.abc.com/js/typeof_extend.js'></script>
</body>
</html>
在chrome 39中测试如下:
在IE 11中测试如下:
参考文献
[1].http://shenjc2008.iteye.com/blog/1009366