javascript判断数据类型

愚人码头 撰写  

今天在封装MTJS的时候出现了一个问题,用于检查数据类型的typeof在检查数组和对象的时候出来的都是“object”;例如


alert(typeof []);
alert(typeof {});

赶紧问朋友,朋友推荐我使用 pjhome的方法,原来这个方法EXT框架上也有的:


function getType(o) {
var _t;
 return ((_t = typeof(o)) == "object" ? o==null && "null" || Object.prototype.toString.call(o).slice(8,-1):_t).toLowerCase();}

alert(getType("abc")); //string
alert(getType(true)); //boolean
alert(getType(123)); //number
alert(getType([])); //array
alert(getType({})); //object
alert(getType(function(){})); //function
alert(getType(new Date)); //date
alert(getType(new RegExp)); //regexp
alert(getType(Math)); //math
alert(getType(null)); //null

很好很强大,这里Object.prototype.toString.call(o)的意思是借用Object原型的toString方法返回对象的字符串表示,就是0调用toString()方法,返回的格式是[Object array],再使用slice(8,-1)就能把“array”获取出来。(感谢rock,子房做的解释)

在自己搜索的时候还发现了另一种判断数据类型的方法,就是constructor(构造函数):

例如:

alert([].constructor==Array);
  alert({}.constructor==Object);
  alert("123".constructor==String);
  alert((55).constructor==Number);
  alert(true.constructor==Boolean);

更多相关链接:


或许你对这些感兴趣:

刚刚被浏览过的文章:


条评论

  1. 扑街囝
    发表了 2009年08月24日 在 4:21 下午 | 永久链接

    constructor不能判断没有定义的变量,例如
    var x;
    alert(x.constructor);// x is undefined

发表评论

Your email is never shared. 标记为 * 的为必填项目

*
*

评论时,昵称或个人网站填的是商业网站的,一概标记为垃圾评论不予显示,并设置相关网站为过滤关键字,提交到google、百度垃圾网站数据库