jQuery.makeArray()
函數用於將一個類數組對象轉換為真正的數組對象。
所謂"類數組對象"就是一個常規的Object對象,但它和數組對象非常相似:具備length屬性,並以0、1、2、3……等數字作為屬性名。
不過它畢竟不是數組,沒有從數組的原型對象上繼承下來的內置方法(例如:push()、 sort()等)。
jQuery.makeArray( object )
注意事項:
- 一個類數組對象,它至少應該具備length屬性,哪怕其值為 0,它可以沒有"元素"(相當於空數組)。
- 如果參數
object
沒有length屬性,則它不是類數組對象。jQuery.makeArray()
會直接將其視作結果數組中的一個元素。 - String對象雖然有length屬性,但一般不將其視作類數組對象。該函數仍然直接將其視作結果數組中的一個元素。
- 如果對象的最大數字屬性大於或等於length屬性,則以length屬性為准,大於或等於其值的數字屬性將被忽略。
返回值
jQuery.makeArray()
函數的返回值為Array類型,返回轉換后的數組對象。
---------------------------------------------------------------------------------------
類數組對象是非常常見的,例如我們經常使用的jQuery對象、NodeList對象以及函數內的arguments對象,都是類數組對象。它們都具有length屬性,而且通過數字屬性來訪問對應的元素或參數。不過,它們畢竟不是真正的數組對象,因此無法使用數組對方的內置方法。通過jQuery.makeArray()
函數,我們可以將類數組對象轉換為一個真正的數組對象,從而使用數組對象的內置方法。
栗子:
//在當前頁面內追加換行標簽和指定的HTML內容 function w(html) { //document.body.innerHTML += "<br/>" + html; console.log(html); } var obj = { 0: "CodePlayer", 1: "Hello", 2: 18, 3: true }; obj.length = 4; // 類數組對象不是真正的數組 w(obj instanceof Array); // false var arr = $.makeArray(obj); w(arr instanceof Array); // true w(arr.join(" ")); // CodePlayer Hello 18 true w(arr.length); // 4 var obj2 = {}; obj2[2] = "DIY"; obj2.length = 1; var arr2 = $.makeArray(obj2); w(arr2 instanceof Array); // true w(arr2.length); // 1 var obj3 = {}; obj3.length = 0; var arr3 = $.makeArray(obj3); w(arr3 instanceof Array); // true w(arr3.length); // 0 var obj4 = {}; // 由於obj4沒有length屬性,直接將其轉換為結果數組中的一個元素 var arr4 = $.makeArray(obj4); w(arr4 instanceof Array); // true w(arr4.length); // 1 w(arr4[0]); // [object Object] // 雖然字符串有length屬性,但它仍被視作結果數組中的一個元素 var arr5 = $.makeArray("CodePlayer"); w(arr5 instanceof Array); // true w(arr5.length); // 1 w(arr5[0]); // CodePlayer
我們常用的jQuery對象、NodeList對象、arguments對象也都是類數組對象。
// jQuery對象也是一個類數組對象 var $p = $("p"); var arr1 = $.makeArray( $p ); w( $p instanceof Array ); // false w( arr1 instanceof Array ); // true // NodeList對象也是一個類數組對象 var p = document.getElementsByTagName("p"); var arr2 = $.makeArray( p ); w( p instanceof Array ); // false w( arr2 instanceof Array ); // true function foo(a, b){ // arguments對象也是一個類數組對象 var arr3 = $.makeArray( arguments ); w( arguments instanceof Array ); // false w( arr3 instanceof Array ); // true } foo(1, 2);
摘自:http://www.365mini.com/page/jquery_makearray.htm