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 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中判断对象具体类型的更多相关文章
- js中推断对象详细类型
大家可能知道js中推断对象类型能够用typeof来推断. 看以下的情况 <script> alert(typeof 1);//number alert(typeof "2&quo ...
- js中判断一个对象的类型的种种方法
javascript中检测对象的类型的运算符有:typeof.constructor.instanceof. typeof:typeof是一个一元运算符,返回结果是一个说明运算数类型的字符串.如:&q ...
- js中判断对象是否存在
s中判断对象是否存在,写法有很多种: 第一种:if (!myObj) { var myObj = { }; }第二种:var global = this; if (!global.myObj) { ...
- js中判断对象类型的几种方法
我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一 ...
- js中判断对象数据类型的方法
对js中不同数据的布尔值类型总结:false:空字符串:null:undefined:0:NaN.true:除了上面的false的情况其他都为true: 如下: var o = { 'name':'l ...
- JS中判断对象是不是数组的方法
JavaScript中检测对象的方法 1.typeof操作符 这种方法对于一些常用的类型来说那算是毫无压力,比如Function.String.Number.Undefined等,但是要是检测Arra ...
- js 中判断对象是否为空
var dd = function (S_object, name) { console.log(name + '第一步执行结果:' + S_object); if (typeof S_objec ...
- 判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解
提醒大家,Object.prototype.toString().call(param)返回的[object class]中class首字母是大写,像JSON这种甚至都是大写,所以,大家判断的时候可以 ...
- JavaScript中判断对象是否属于Array类型的4种方法及其背后的原理与局限性
前言 毫无疑问,Array.isArray是现如今JavaScript中判断对象是否属于Array类型的首选,但是我认为了解本文其余的方法及其背后的原理与局限性也是很有必要的,因为在JavaScrip ...
随机推荐
- 前端学PHP之MemCache
× 目录 [1]作用 [2]安装 [3]管理[4]命令 前面的话 Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括 ...
- 6.JAVA之GUI编程Action事件
功能:单击一个按钮实现关闭窗口: import java.awt.*; import java.awt.event.*; public class StudyAction { // 定义该图形所需的组 ...
- How do servlets work-Instantiation, sessions, shared variables and multithreading[reproduced]
When the servletcontainer (like Apache Tomcat) starts up, it will deploy and load all webapplication ...
- ASP.NET Core 中文文档 第三章 原理(8)日志
原文:Logging 作者:Steve Smith 翻译:刘怡(AlexLEWIS) 校对:何镇汐.许登洋(Seay) ASP.NET Core 内建支持日志,也允许开发人员轻松切换为他们想用的其他日 ...
- Event Sourcing Pattern 事件源模式
Use an append-only store to record the full series of events that describe actions taken on data in ...
- .NET 开源SqlServer ORM框架 SqlSugar 3.0 API
3.1.x ,将作为3.X系统的最后一个版本,下面将会开发 全新的功能 更新列表:https://github.com/sunkaixuan/SqlSugar/releases 优点: SqlSuga ...
- Bonobo创建新库出错,解决方案
创建新库出错如下: Native library pre-loader is trying to load native SQLite library "D:\wwwroot\localho ...
- Sencha ExtJS 6 Widget Grid 入门
最近由于业务需要,研究了一下Sencha ExtJS 6 ,虽然UI和性能上据相关资料说都有提升,但是用起来确实不太顺手,而且用Sencha cmd工具进行测试和发布,很多内部细节都是隐藏的,出了问题 ...
- Python开发【第二篇】:Python基础知识
Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...
- html5 canvas首屏自适应背景动画循环效果代码
模板描述:html5 canvas首屏自适应背景动画循环效果代码 由于动态图太大,怕以后服务器受不了,所以现在都改为静态图了,大家点击演示地址一样的,希望大家喜欢,你们的支持就是小海的动力!! 欢迎大 ...