js中推断对象详细类型

大家可能知道js中推断对象类型能够用typeof来推断。

看以下的情况

<script>
           alert(typeof 1);//number
           alert(typeof "2");//string
           alert(typeof [1,2,3]);//object
           alert(typeof {"name":"zhuhui"})//object
</script>

从上面中我们能够看出数组和普通对象用typeof推断出来都是object,可是如今我们有这个需求,我们要明白推断出这个对象是详细的哪个对象(比方数组对象,日期对象。正則表達式对象。其它自己定义对象,DOM对象等等)那怎么办呢。事实上js中有个方法能够准备的推断出

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

以下是曾经做项目封装推断常见数据类型的js

/**
 * type.js 数据类型检測函数
 * @author 朱辉
 * @email [email protected]
 * @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‘;
    };
    /**
     * 是否为函数类型 假设是就返回true 假设不是就返回false
     * @param {Any} v 被检測的变量
     * @return {Boolean}
     */
    xjo.type.isFuntion = function(v){
        return type(v) === ‘[object Function]‘;
    };
    /**
     * 是否为对象类型
     * @param {Any} v 被检測的变量
     * @return {boolean}
     */
    xjo.type.isObject = function(v){
        return !!v && type(v) === ‘[object Object]‘;
    };
    /**
     * 是否为日期类型  假设是就返回true 假设不是就返回false
     * @param {Any} v 被检測的变量
     * @return {boolean}
     */
    xjo.type.isDate = function(v){
        return type(v) === ‘[object Date]‘;
    };
    /**
     * 是否为正則表達式类型  假设是就返回true 假设不是就返回false
     * @param {Any} v 被检測的变量
     * @return {Boolean}
     */
    xjo.type.isRegexp = function(v){
        return type(v) == ‘[object RegExp]‘;
    };
    /**
     * 是否为原始数据类型 假设是就返回true 假设不是就返回false
     * @param {Any} v 被检測的变量
     * @return {Boolean}
     */
    xjo.type.isPrimitive = function(v){
        return xjo.type.isString(v) || xjo.type.isNumber(v) ||
        xjo.type.isBoolean(v);
    };
    /**
     * 返回数据类型的字符串形式<br>
     *  数字类型:"number" <br>
     *  布尔类型:"boolean" <br>
     *  字符串类型:"string" <br>
     *  数组类型:"array"<br>
     *  日期类型:"date"<br>
     *  正則表達式类型:"regexp" <br>
     *  函数类型:"function"<br>
     *  对象类型:"object"<br>
     *  參数管理器类型:"arguments"<br>
     *  其它类型:"unknow"
     * @param {Any} v 被检測的变量
     * @return {String}
     */
    xjo.type.type = function(v){
        var result = "unknow";
        if (xjo.type.isNumber(v)) {
            result = "number";
        }
        if (xjo.type.isBoolean(v)) {
            result = "boolean";
        }
        if (xjo.type.isString(v)) {
            result = "string";
        }
        if (xjo.type.isArray(v)) {
            result = "array";
        }
        if (xjo.type.isDate(v)) {
            result = "date";
        }
        if (xjo.type.isRegexp(v)) {
            result = "regexp";
        }
        if (xjo.type.isFuntion(v)) {
            result = "function";
        }
        if (xjo.type.isObject(v)) {
            result = "object";
        }
        if (xjo.type.isArguments(v)) {
            result = "argumetns";
        }
        return result;
    };
    xjo.plugin["jo/type"] = true;
})(window);
时间: 2024-12-05 21:42:20

js中推断对象详细类型的相关文章

js中判断对象具体类型

大家可能知道js中判断对象类型可以用typeof来判断.看下面的情况 <script> alert(typeof 1);//number alert(typeof "2");//string alert(typeof [1,2,3]);//object alert(typeof {"name":"zhuhui"})//object </script> 从上面中我们可以看出数组和普通对象用typeof判断出来都是object

浅解析js中的对象

浅解析js中的对象 说到对象,我首先想到的是每逢过年过节,长辈们老是开玩笑的问我“你找了对象没?”.不说大家都知道,这里的“对象”指的是“女朋友”,但是今天我想要说的js中的“对象”和我们生活中谈到的“对象”不是同一回事,但是其中也有着很多相似之处.    在讲js中的对象之前,我想先抛出几个疑问:    什么是对象?    对象有哪些?    对象能做什么?    如何创建对象?    如何对对象进行操作?    对象有特性么?有的话有哪些特性?    对象有属性么?有的话有哪些?对属性如何操

判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解

转载自[脚本之家],原文链接:http://www.jb51.net/article/42864.htm 提醒大家,Object.prototype.toString().call(param)返回的[object class]中class首字母是大写,像JSON这种甚至都是大写,所以,大家判断的时候可以都转换成小写,以防出错 1.typeof(param) 返回param的类型(string) 这种方法是JS中的定义的全局方法,也是编译者们最常用的方法,优点就是使用简单.好记,缺点是不能很好的

js中window对象详解以及页面跳转

js中window对象详解以及页面跳转 转自:http://www.makaidong.com/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E6%90%9C/39219.shtml 1.window.top.window.location = "index.asp"; 2.window.top.location.href="index.asp" 3. window.top.location.replace("index.asp");

JS中有关对象的继承以及实例化、浅拷贝深拷贝的奥秘

一.属性的归属问题 JS对象中定义的属性和方法如果不是挂在原型链上的方法和属性(直接通过如类似x的方式进行定义)都只是在该对象上,对原型链上的没有影响.对于所有实例共用的方法可直接定义在原型链上这样实例化的的时候就不用对每个实例定义该属性方法,所有的实例均具有该方的引用见最后的输出. function Myclass(){ this.x=" x in Myclass"; this.get=function(){}//每次实例化对象,每个对象的该方法都是独立的,是不相同的 } Mycla

JS中的对象和方法简单剖析

众所周知,在js中对象就是精髓,不理解对象就是不理解js. 那么什么事js中的对象呢? 在js中,几乎一切皆对象: Boolean ,String,Number可以是对象(或者说原生数据被认作对象): Dates ,Maths,Regexps,Arrays,Funcitons,当然Objects,这些都是对象: JS中,所有值,除了原生值,都是对象:这些原生值包括:strings,numbers('3.14'),true,false,null和undefined 对象是包含变量的变量,js变量可

swfupload js中 file 对象的属性

name=3cc68cfc60b87e6dd6887d8a.jpg modificationdate=Wed   Apr 21 15:48:30 UTC+0800 2010 filestatus=-1 post=[object   Object] type=.jpg index=0 size=29006 creationdate=Wed Apr 21 15:48:38 UTC+0800   2010 id=SWFUpload_0_0swfupload js中 file 对象的属性,布布扣,bub

js实现小时钟,js中Date对象的使用?

介绍一下js中Date对象的使用 dateObj = new Date() dateObj = new Date(dateValue) dateObj = new Date(year,month,date[,hours[,minutes[,seconds[,ms]]]]); 以下有一个小样例 <script type="text/javascript"> function setTime(){ //获得如今的时间 var now = new Date(); var year

JavaScript学习12 JS中定义对象的几种方式【转】

avaScript学习12 JS中定义对象的几种方式 转自:  http://www.cnblogs.com/mengdd/p/3697255.html JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工厂方式 3.构造函数方式 4.原型("prototype")方式 5.动态原型方式 一.基于已有对象扩充其属性和方法 <script type="text/javascript