jQuery.makeArray() 函數詳解

jQuery.makeArray()函數用於將一個類數組對象轉換爲真正的數組對象

所謂"類數組對象"就是一個常規的Object對象,但它和數組對象非常相似:具備length屬性,並以0、1、2、3……等數字作爲屬性名。不過它畢竟不是數組,沒有從數組的原型對象上繼承下來的內置方法(例如:push()、 sort()等)。

該函數屬於全局jQuery對象。

語法

jQuery 1.2 新增靜態函數

jQuery.makeArray( object )

參數

參數 描述
object Object類型需要轉換爲數組的類數組對象。

注意事項

  • 一個類數組對象,它至少應該具備length屬性,哪怕其值爲 0,它可以沒有"元素"(相當於空數組)。
  • 如果參數object沒有length屬性,則它不是類數組對象。jQuery.makeArray()會直接將其視作結果數組中的一個元素。
  • String對象雖然有length屬性,但一般不將其視作類數組對象。該函數仍然直接將其視作結果數組中的一個元素。
  • 如果對象的最大數字屬性大於或等於length屬性,則以length屬性爲準,大於或等於其值的數字屬性將被忽略。

返回值

jQuery.makeArray()函數的返回值爲Array類型,返回轉換後的數組對象。

示例&說明

類數組對象是非常常見的,例如我們經常使用的jQuery對象、NodeList對象以及函數內的arguments對象,都是類數組對象。它們都具有length屬性,而且通過數字屬性來訪問對應的元素或參數。不過,它們畢竟不是真正的數組對象,因此無法使用數組對方的內置方法。通過jQuery.makeArray()函數,我們可以將類數組對象轉換爲一個真正的數組對象,從而使用數組對象的內置方法。

jQuery.makeArray()函數的jQuery示例代碼如下:

//在當前頁面內追加換行標籤和指定的HTML內容
function w( html ){
    document.body.innerHTML += "<br/>" + 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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章