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);