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 ...
随机推荐
- C#设计模式-中介者模式
在现实生活中,有很多中介者模式的身影,例如QQ游戏平台,聊天室.QQ群和短信平台,这些都是中介者模式在现实生活中的应用,下面就具体分享下我对中介者模式的理解. 一. 中介者(Mediator)模式 从 ...
- iOS-----App闪退,程序崩溃---解决方案
1.iOS-中app启动闪退的原因 2.iOS开发-闪退问题-解决之前上架的 App 在 iOS 9 会闪退问题 3.iOS-应用闪退总结 4.iOS开发-捕获程序崩溃日志 5.iOS开发-应用崩溃日 ...
- WCF学习之旅—第三个示例之五(三十一)
上接WCF学习之旅—第三个示例之一(二十七) WCF学习之旅—第三个示例之二(二十八) WCF学习之旅—第三个示例之三(二十九) WCF学习 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(57)-插件---ueditor使用
系列目录 目录: 前言 开发环境 知识点 初始使用 自定义工具栏 设置和读取编辑器内容 文件上传 ueditor加水印 ---------------------------------------- ...
- 手动制作微信h5分享活动页面
现在网上有很多自动制作h5宣传页的网站,可以通过传图,点几下鼠标就可以制作一个集动画.生产二维码等各种功能于一身的h5微信宣传页.对于运营来讲,非常方便,没有技术门槛,不足之处就是只有特定的动画效果, ...
- MVC5学习系列--Razor视图(一)
前言 嗷~小弟我又出现了~咳咳..嚎过头了, 先说一说为什么写这个吧,~首先肯定是我自己需要学(废话 - -,)//,之前也写过MVC4的项目,嗯..但是仅限于使用并没有很深入的每个模块去了解, 这段 ...
- cookie保存中文登录账号获取时乱码问题
登录成功后写入cookie的代码 Response.Cookies["account"].Value = account;//"管理员" Response.Co ...
- Amazon Interview | Set 27
Amazon Interview | Set 27 Hi, I was recently interviewed for SDE1 position for Amazon and got select ...
- [dedecms]后台不显示验证码
原因:某个加载文件的开始处有一个标点,去掉就可显示 // 文件地址 /include/vdimgck.php @session_start(); $_SESSION['securimage_code_ ...
- JAVA调用R
JAVA很适合开发应用系统,但是数学建模和计算能力非其所长,如果该系统需要进行大量的统计或者优化的计算,调用R是一种很好的方式.JAVA负责系统的构建,R用来做运算引擎,从而实现应用型和分析性相结合的 ...