jQery每一個方法都有對應程式碼解析,非常詳細,有介紹請看下文:
isFunction方法
用來測試是否為函數的物件
範例:
function stub() { } var objs = [ function () {}, { x:15, y:20 }, null, stub, "function" ]; jQuery.each(objs, function (i) { var isFunc = jQuery.isFunction(objs[i]); $("span:eq( " + i + ")").text(isFunc); })
運行結果:
源碼分析:
// See test/unit/core.js for details concerning isFunction. // Since version 1.3, DOM methods and functions like alert // aren't supported. They return false on IE (#2968). isFunction: function( obj ) { return jQuery.type(obj) === "function"; },
首先就告訴你自從1.3版本就有bug ,一些dom方法和函數例如alert在ie裡面會返回false,看了下這個bug,因為toString方法和valueOf方法都會被重寫所以有人就提出了用instanceof方法檢測但在ie6還是有問題。目前為止這個bug還沒有關閉具體大家可以從參考官網bug頁因為我分析的是1.7.1所以就先按照這個版本來,這個方法就是簡單的調用type方法判斷其返回結果是否為字符串function
isArray方法
用來測試是否為陣列的物件
範例:
$("b").append( " + $.isArray([]) );//<b>true</b> isArray: Array.isArray || function( obj ) { return jQuery.type(obj) === "array"; },
跟isFunctoin一樣直接使用type方法的回傳結果
isNumeric方法
確定它的參數是否為一個數字。
$.isNumeric() 方法檢查它的參數是否代表一個數值。如果是這樣,它會傳回 true。否則,它會傳回false。此參數可以是任何類型的
範例:
$.isNumeric("-10"); // true $.isNumeric(16); // true $.isNumeric(0xFF); // true $.isNumeric("0xFF"); // true $.isNumeric("8e5"); // true (exponential notation string) $.isNumeric(3.1415); // true $.isNumeric(+10); // true $.isNumeric(0144); // true (octal integer literal) $.isNumeric(""); // false $.isNumeric({}); // false (empty object) $.isNumeric(NaN); // false $.isNumeric(null); // false $.isNumeric(true); // false $.isNumeric(Infinity); // false $.isNumeric(undefined); // false
源碼分析:
這個方法不是判斷Number型別而是看起來像數字的型別只要傳進去的參數包含數字那麼就會回傳true,先用parseFloat法把參數轉為數組,此方法會保留參數中的數字部分過濾掉其他部分,如果結果不是NaN也沒有超過最大值就是true否則回傳false
isWindow方法
用來測試是否為window物件
<div class="codetitle"><span><a style="CURSOR: pointer" data="41657" class="copybut" id="copybut41657" onclick="doCopy('code41657')"><U>复制代码</U></a></span> 代码如下:</div><div class="codebody" id="code41657">isNumeric: function( obj ) { return !isNaN( parseFloat(obj) ) && isFinite( obj ); }, </div>
一種粗略的方法判斷對像是window,如果滿足傳進來的是對象而且具有setInterval方法則認為該對象為window對象,現在這個方法已經改為判斷是否是窗口對象了具體以後在分析。希望大家能夠喜歡以上內容所述。