javascript 类型检测
2015-03-03 15:59
148 查看
关于javascript的类型检测,根据浏览器的不同可能会产生不一样的结果,但是哥哥浏览器总有相同的地方,现在 总结一下各个浏览器通用的类型检测方法:
可以使用typeof的检测基本类型
检测null类型
检测undefined类型
检测是否为网页元素
检测复杂类型(jquery)(包括基本类型)
检测复杂类型(从jquery提取)(包括基本类型)
检测自定义函数类型
//使用方法
来自本方法来源
基本原理是由于objClass里有一个constructor指针,这个指针指向了创建objClass的function。我们找到这个function用tostring来返回整个function的字符串定义。然后截取前方的函数定义名(当然如果用var xxx=function(){}那么他就是一个匿名函数。返回一个Anonymous代替)
另外javascript还有一个方法instantof 这个并不是类型检测但却能知道这个对象究竟是哪个类型以及其父类型下的,返回bool值。比如
返回为Y.
以上总结各有优缺点,基本上原生的方法typeof是最快的也是最推荐使用的。但是他的缺点也是最明显。有些类型不能真正的判断。如果你要判断的不是基本类型。那么使用typeof也是不错的选择,毕竟他可以获得自定义类型。同时兼顾了基本类型。不过鉴于我所使用的测试平台基本上限于浏览器,没有在其他平台上做测试。不知道能否使用。
可以使用typeof的检测基本类型
String: typeof object === “string” Number: typeof object === “number” Boolean: typeof object === “boolean” Object: typeof object === “object”
检测null类型
null: object === null null or undefined: object == null
检测undefined类型
Global Variables全局变量: typeof variable === “undefined” Local Variables 本地变量: variable === undefined Properties属性: object.prop === undefined
检测是否为网页元素
Element: object.nodeType
检测复杂类型(jquery)(包括基本类型)
Plain Object: jQuery.isPlainObject( object ) Function: jQuery.isFunction( object ) Array: jQuery.isArray( object )
检测复杂类型(从jquery提取)(包括基本类型)
//前期准备 var class2type={}; class2type[ "[object Boolean]" ] ="boolean"; class2type[ "[object Number]" ] ="number"; class2type[ "[object String]" ] ="string"; class2type[ "[object Function]" ] ="function"; class2type[ "[object Array]" ] ="array"; class2type[ "[object Date]" ] ="date"; class2type[ "[object RegExp]" ] ="regexp"; class2type[ "[object Object]" ] ="object"; var type=function( obj ) { return obj == null ? String( obj ) : class2type[ Object.prototype.toString.call(obj) ] || "object"; } //如何使用 var isFunction = function( obj ) { return type(obj) === "function"; } var isArray = Array.isArray || function( obj ) { return type(obj) === "array"; } var isWindow = function( obj ) { return obj != null && obj == obj.window; } var isPlainObject = function( obj ) { if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || isWindow( obj ) ) { return false; } try { if ( obj.constructor && ! Object.prototype.hasOwnProperty.call(obj, "constructor") && ! Object.prototype.hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) { return false; } } catch ( e ) { // IE8,9 Will throw exceptions on certain host objects #9897 return false; } var key; for ( key in obj ) {} return key === undefined || Object.prototype.hasOwnProperty.call( obj, key ); } var isNumeric = function( obj ) { return !isNaN( parseFloat(obj) ) && isFinite( obj ); } var isEmptyObject = function( obj ) { var name; for ( name in obj ) { return false; } return true; }
检测自定义函数类型
function __typeof__(objClass) { if ( objClass != undefined && objClass.constructor ) { var strFun = objClass.constructor.toString(); var className = strFun.substr(0, strFun.indexOf('(')); className = className.replace('function', ''); className= classNam 4000 e.replace(/(^\s*)|(\s*$)/ig, ''); return className==""?"Anonymous":className; } return typeof(objClass); }
//使用方法
<script language="javascript"> alert(__typeof__(jsclass)); alert(__typeof__(JSClass)); alert(__typeof__(1)); alert(__typeof__([])); alert(__typeof__({})); </script> //结果分别为:"JSClass", "Function", "Number", "Array"和"Object"。
来自本方法来源
基本原理是由于objClass里有一个constructor指针,这个指针指向了创建objClass的function。我们找到这个function用tostring来返回整个function的字符串定义。然后截取前方的函数定义名(当然如果用var xxx=function(){}那么他就是一个匿名函数。返回一个Anonymous代替)
另外javascript还有一个方法instantof 这个并不是类型检测但却能知道这个对象究竟是哪个类型以及其父类型下的,返回bool值。比如
var a=new Array(); if (a instanceof Object) { alert('Y'); }else {**重点内容** alert('N') }
返回为Y.
以上总结各有优缺点,基本上原生的方法typeof是最快的也是最推荐使用的。但是他的缺点也是最明显。有些类型不能真正的判断。如果你要判断的不是基本类型。那么使用typeof也是不错的选择,毕竟他可以获得自定义类型。同时兼顾了基本类型。不过鉴于我所使用的测试平台基本上限于浏览器,没有在其他平台上做测试。不知道能否使用。
相关文章推荐
- javascript 检测浏览器类型、操作系统平台的代码
- [转]JavaScript类型检测小结
- javascript类型检测(转载)
- Javascript数组类型检测:编写更强壮的isArray函数
- 浅谈javascript的数据类型检测
- javascript检测图片大小、类型、长宽
- javascript 浏览器类型检测
- javascript中检测变量的类型的代码
- JavaScript数据类型检测
- 浅谈JavaScript数据类型检测
- JavaScript类型检测小结(上)
- Javascript isArray 数组类型检测函数
- Javascript isArray 数组类型检测函数
- javascript中检测变量的类型的代码
- JavaScript类型检测小结(转)
- JavaScript类型检测小结-http://bbs.51js.com/viewthread.php?tid=82661
- javascript 检测浏览器类型和版本的代码
- javascript检测浏览器类型和版本号(兼容各浏览器)
- javascript 学习笔记(六)浏览器类型及版本信息检测代码
- JavaScript检测类型