扩展typeof来判断js变量的类型

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值