在 jQuery 中,我们可以使用$.makeArray()方法将“类数组对象”转换为真正的数组。那什么叫“类数组对象”呢?“类数组对象”必须有 length 属性,例如 arguments、nodeList 等。
语法:
$.makeArray()方法的返回值是一个数组。如果参数 obj 不是类数组对象,则返回值是一个空数组。
举例:将 arguments 转化为 Array
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script src="js/jquery-1.12.4.min.js"></script>
<script>
function test() {
var arr = $.makeArray(arguments);
console.log(arr);
}
test("yes",1,{}); // ["yes", 1, Object]
</script>
</head>
<body>
</body>
</html>
控制台输出结果如图 1 所示。
可能很多人就会问了,为什么要将 arguments、nodeList 这些类数组对象转换为真正的数组呢?因为转换为真正的数组后,我们就可以调用数组的各种方法来操作这些对象。
举例:将 nodeList 转换为 Array
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script src="js/jquery-1.12.4.min.js"></script>
<script>
$(function(){
var arr = $.makeArray($("li"));
$("ul").html(arr.reverse());
})
</script>
</head>
<body>
<ul>
<li>HTML</li>
<li>CSS</li>
<li>JavaScript</li>
<li>jQuery</li>
<li>Vue.js</li>
</ul>
</body>
</html>
预览效果如图 2 所示。
将 nodeList 转换为 Array 这种方式非常好用,特别是对一组节点进行同一操作的时候。像上面这个例子,小伙伴们想一下,如果使用原生 JavaScript 语法该怎么实现(提示:ES6 提供了 Array.from() 方法)。