makeArray: function( array, results ) {//轉換一個類似數組的對象成為真正的JavaScript數組。 results為可選參數
var ret = results || [];//results作為存放arry的數組,如果沒有定義就設置為空數組
if ( array != null ) {{//window,String,Function,Array類型的.length不為undefined;(document.getElementById IE 為undefined,jQuery.type(document.getElementById )為object,所以類似這樣的方法在IE下比較特別,可以jquery裡的type方法)
var type = jQuery.type( array );
if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) )
push.call( ret, array );// 傳入的對象不是數組,就push加入ret數組中
} else {
jQuery.merge( ret, array );//傳入對象是數組或者類似數組,直接合並到ret數組中
}
}
return ret;
},
inArray: function( elem, array ) {//搜索數組中指定值並返回它的索引(如果沒有找到則返回-1)。
if ( indexOf ) {//ECMA - 262標准的浏覽器都支持,IE系列要到IE9才支持Array.prototype.indexOf,
return indexOf.call( array, elem );
}
for ( var i = 0, length = array.length; i < length; i++ ) {//IE9以下版本,通過循環數組來判斷
if ( array[ i ] === elem ) {
return i;
}
}
return -1;
},
merge: function( first, second ) {//合並數組
var i = first.length,
j = 0;
if ( typeof second.length === "number" ) {//簡單檢測對象是否有length屬性,有則循環添加到操作數組後面
for ( var l = second.length; j < l; j++ ) {//String,Array類型
first[ i++ ] = second[ j ];
}
} else {
while ( second[j] !== undefined ) {
first[ i++ ] = second[ j++ ];
}
}
first.length = i;
return first;
},
grep: function( elems, callback, inv ) {//查找滿足過濾功能數組元素。原始數組不受影響。
var ret = [], retVal;
inv = !!inv;//轉化成布爾值類型,如果沒有明確指定inv或者指定為false,inv=false;
for ( var i = 0, length = elems.length; i < length; i++ ) {
retVal = !!callback( elems[ i ], i );//轉化成布爾值類型
if ( inv !== retVal ) {//callback返回的結果如果與inv相反,即保留
ret.push( elems[ i ] );
}
}
return ret;
},