欢迎访问我的github:huanshen,有我的源码解析
常用的判断函数有type,isEmptyObject,isFunction,isWindow,isPlainObject,isArraylike,isArray,isNumeric,documentIsHTML ,isXML,并对其源码进行了解析。
1、类型type
type: function( obj ) {
if ( obj == null ) {
return String( obj );
}
// Support: Safari <= 5.1 (functionish RegExp)
利用事先存好的 hash 表 class2type 作精准判断
return typeof obj === "object" || typeof obj === "function" ?
class2type[ core_toString.call(obj) ] || "object" :
typeof obj;
},
首先其修正了 typeof null 为object的缺陷。其次利用事先存好的 hash 表 class2type 作精准判断。
其中core_toString=obj.toString; obj是一个对象
Populate the class2type map jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),(i,name) { class2type[ "[object " + name + "]" ] = name.toLowerCase(); });
var obj={ };arr=[];
console.log(obj.toString.call(arr));[object Array]
console.log(obj.toString.call(obj));[object Object]
2、空对象isEmptyObject
3、数字isNumeric4、函数isFunctionisFunction: return jQuery.type(obj) === "function"5、isWindow
6、isArray利用数组自带的isArray来判断7、isPlainObjectif ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { ; } Support: Firefox <20 The try/catch suppresses exceptions thrown when attempting to access the "constructor" property of certain host objects,ie. |window.location| https://bugzilla.mozilla.org/show_bug.cgi?id=814622 try { if ( obj.constructor && !core_hasOwn.call( obj.constructor.prototype,"isPrototypeOf" ) ) { ; } } catch ( e ) { If the function hasn't returned already,we're confident that |obj| is a plain object,created by {} or constructed with new Object isArraylike(such as loading iframes in IE - #4833) var documentElement = elem && (elem.ownerDocument || elem).documentElement; xml的根节点不可能是HTML return documentElement ? documentElement.nodeName !== "HTML" : ; };
10、documentIsHTML
Support tests 不是xml就是HTML documentIsHTML = !isXML( doc );这判断也是神判断啊
原文链接:/jquery/881700.html
猜你在找的jQuery相关文章