日期:2014-05-16 浏览次数:20484 次
大家可能知道js中判断对象类型可以用typeof来判断。看下面的情况
<script>
alert(typeof 1);//number
alert(typeof "2");//string
alert(typeof [1,2,3]);//object
alert(typeof {"name":"zhuhui"})//object
</script>Object.prototype.toString.call
var type=function(v){
return Object.prototype.toString.call(v);
};
alert(type(null));//[object Null]
alert(type(undefined));//[object Undefined]
alert(type(1));//[object Number]
alert(type(true));//[object Boolean]
alert(type("2"));//[object String]
alert(type([1,2,3]));//[object Array]
alert(type({"name":"zhuhui"}));//[object Object]
alert(type(type));//[object Function]
alert(type(new Date()));//[object Date]
alert(type(/^\d+$/));//[object Regexp]关于这个方法更深入的说明请参考http://www.cnblogs.com/ziyunfei/archive/2012/11/05/2754156.html/**
* type.js 数据类型检测函数
* @author 朱辉
* @email javaee6@qq.com
* @version 0.1
*/
(function(window, undefined){
xjo = window.xjo ||
{
plugin: {}
};
xjo.type = {};
//检测v的类型 辅助函数
var type = function(v){
return Object.prototype.toString.call(v);
};
/**
* 是否为数组对象类型 如果是就返回true 如果不是就返回false
* @namespace xjo.type
* @method isArray
* @param {Any} v 被检测的变量
* @return {Boolean} 结果
*/
xjo.type.isArray = function(v){
return type(v) === '[object Array]';
};
/**
* 是否为参数管理器Arguments 如果是就返回true 如果不是就返回false
* @param {Any} v 被检测的变量
* @return {Boolean}
*/
xjo.type.isArguments = function(v){
return v.callee != undefined;
};
/**
* 是否为迭代序列 包含Array与Arguments 如果是就返回true 如果不是就返回false
* @param {Any} v 被检测的变量
* @return {Boolean}
*/
xjo.type.isIterable = function(v){
return xjo.type.isArray(v) || xjo.type.isArguments(v);
};
/**
* 是否为空对象 null和undefined和数组的长度为0或空字符串("") 如果是就返回true 如果不是就返回false
* @param {Any} v 被检测的变量
* @param {Boolean} allowBlank [可选] 默认false 空字符串认为是空对象 反之 空字符串不认为是空对象
* @return {Boolean}
*/
xjo.type.isEmpty = function(v, allowBlank){
return v === null || v === undefined ||
(xjo.type.isArray(v) && !v.length) ||
(!allowBlank ? v === '' : false);
};
/**
* 是否为字符串类型 如果是就返回true 如果不是就返回false
* @param {Any} v 被检测的变量
* @return {Boolean}
*/
xjo.type.isString = function(v){
return typeof v === 'string';
};
/**
* 是否为数字类型(为Number且不为正负无穷大数字) 如果是就返回true 如果不是就返回false
* @param {Any} v 被检测的变量
* @return {Boolean}
*/
xjo.type.isNumber = function(v){
return typeof v === 'number' && isFinite(v);
};
/**
* 是否为布尔值类型 如果是就返回true 如果不是就返回false
* @param {Any} v 被检测的变量
* @return {Boolean}
*/
xjo.type.isBoolean = function(v){
return typeof v === 'boolean'