今天在封装MTJS的时候出现了一个问题,用于检查数据类型的typeof在检查数组和对象的时候出来的都是“object”;例如
[code=”javascript”]
alert(typeof []);
alert(typeof {});
[/code]
赶紧问朋友,朋友推荐我使用 pjhome的方法,原来这个方法EXT框架上也有的:
[code=”javascript”]
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
[/code]
很好很强大,这里Object.prototype.toString.call(o)的意思是借用Object原型的toString方法返回对象的字符串表示,就是0调用toString()方法,返回的格式是[Object array],再使用slice(8,-1)就能把“array”获取出来。(感谢rock,子房做的解释)
在自己搜索的时候还发现了另一种判断数据类型的方法,就是constructor(构造函数):
例如:
[code=”javascript”]alert([].constructor==Array);
??alert({}.constructor==Object);
??alert(“123”.constructor==String);
??alert((55).constructor==Number);
??alert(true.constructor==Boolean);[/code]