大家可能知道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 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';
     };
     /**
      * 是否为函数类型 如果是就返回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);

js中判断对象具体类型的更多相关文章

  1. js中推断对象详细类型

    大家可能知道js中推断对象类型能够用typeof来推断. 看以下的情况 <script> alert(typeof 1);//number alert(typeof "2&quo ...

  2. js中判断一个对象的类型的种种方法

    javascript中检测对象的类型的运算符有:typeof.constructor.instanceof. typeof:typeof是一个一元运算符,返回结果是一个说明运算数类型的字符串.如:&q ...

  3. js中判断对象是否存在

    s中判断对象是否存在,写法有很多种: 第一种:if (!myObj) { var myObj = { }; }第二种:var global = this;  if (!global.myObj) {  ...

  4. js中判断对象类型的几种方法

    我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一 ...

  5. js中判断对象数据类型的方法

    对js中不同数据的布尔值类型总结:false:空字符串:null:undefined:0:NaN.true:除了上面的false的情况其他都为true: 如下: var o = { 'name':'l ...

  6. JS中判断对象是不是数组的方法

    JavaScript中检测对象的方法 1.typeof操作符 这种方法对于一些常用的类型来说那算是毫无压力,比如Function.String.Number.Undefined等,但是要是检测Arra ...

  7. js 中判断对象是否为空

      var dd = function (S_object, name) { console.log(name + '第一步执行结果:' + S_object); if (typeof S_objec ...

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

    提醒大家,Object.prototype.toString().call(param)返回的[object class]中class首字母是大写,像JSON这种甚至都是大写,所以,大家判断的时候可以 ...

  9. JavaScript中判断对象是否属于Array类型的4种方法及其背后的原理与局限性

    前言 毫无疑问,Array.isArray是现如今JavaScript中判断对象是否属于Array类型的首选,但是我认为了解本文其余的方法及其背后的原理与局限性也是很有必要的,因为在JavaScrip ...

随机推荐

  1. Linux进程管理及while循环

    目录 进程的相关概念 进程查看及管理工具的使用 Linux系统作业控制 调整进程优先级 网络客户端工具 bash之while循环 20.1.进程类型 守护进程 daemon,在系统引导过程中启动的进程 ...

  2. 浅谈JavaScript中forEach与each

    forEach是ES5中操作数组的一种方法,主要功能是遍历数组,例如: var arr = [1,2,3,4]; arr.forEach(alert); 等价于: var arr = [1, 2, 3 ...

  3. 微信JSAPI支付

    最近在微信H5页面内集成微信JSAPI支付,遇到不少问题,现将集成步骤及遇到的问题记录如下: 1.官方下载SDK,下载地址:https://pay.weixin.qq.com/wiki/doc/api ...

  4. Python 小白的新手教程(一)

    本文是 python 入门级别的基础知识,包括数据类型和变量.输入输出.字符串和编码.list tuple dict set .条件判断.循环.函数.切片 迭代 列表生成器 生成器 迭代器等. 参考课 ...

  5. Boostrap入门(一)

    1.第一步:下载Boostrap有关文件 Boostrap中文网:http://www.bootcss.com/ -->--> 2.第二步: 如下代码:引入相关文件即可. <!DOC ...

  6. 1、Python基础知识

    输出print “houkai”,3.0版本后print修改为函数,print(‘houkai’) 数学运算:默认整数整除1/2=0而1.0/2=0.5,可以使用from __future__ imp ...

  7. JavaScript 中对变量和函数声明的“提前”

    变量声明“被提前” JavaScript 的语法和 C .Java.C# 类似,统称为 C 类语法.有过 C 或 Java 编程经验的同学应该对“先声明.后使用”的规则很熟悉,如果使用未经声明的变量或 ...

  8. Hibernate(6)—— 一对多 和 多对多关联关系映射(xml和注解)总结

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: One to Many 映射关系 多对一单向外键关联(XML/Annotation) 一对多单向外键关联(XM ...

  9. 2016网易春招Java在线笔试回忆录

    别看是在线笔试,但是非常严格,全称窗口不得最小化和关闭,转移,全称需要打开摄像头监控,使用草稿纸需要摄像头对准……反正2个小时,题量在那儿摆着,有作弊的功夫不如好好做做最后的编程题呢……网易不让泄漏原 ...

  10. SSRS 实用技巧 ---- 为表格添加展开/折叠操作(明细报表)

    相信很多人都会遇到这样的需求:当表格按照某几个列分组时,需要为组添加展开和折叠的操作. 最初展现表格的时候只展现最外层分组,然后点击展开后可以查看分组内的明细情况. 先来一张效果图,然后再看具体如何实 ...