📅  最后修改于: 2023-12-03 14:43:16.722000             🧑  作者: Mango
在 jQuery 中,toArray()
和 $.makeArray()
都用于将集合转换为数组,但它们在实现上有一些区别。
toArray()
是 jQuery 实例对象上的方法,它将当前的 jQuery 集合转换为原生的 JavaScript 数组。示例:
var $listItems = $('li');
var array = $listItems.toArray();
console.log(array);
输出:
[li, li, li, li, li]
$.makeArray()
是 jQuery 工具函数,它将一个类数组对象(例如 arguments 对象、DOM 集合或字符串)转换为真正的数组。示例:
var arrayLikeObj = {0:'zero', 1:'one', length: 2};
var array = $.makeArray(arrayLikeObj);
console.log(array);
输出:
['zero', 'one']
toArray()
只能用于 jQuery 对象,而 $.makeArray()
可以用于任何类数组的对象。
toArray()
的实现方式相对简单,只需通过 .slice()
方法将集合转换为数组。而 $.makeArray()
的实现更复杂,它会先尝试调用对象上的 toArray
方法,然后再把剩下的值 push 进一个新数组。
$.makeArray()
可以接收第二个参数,将其作为新数组的上下文,方便我们在执行转换的同时利用数组的函数方法。例如:
var nodeList = document.querySelectorAll('li');
var $listItems = $('li');
// 找到偶数节点
var array = $.makeArray(nodeList, $listItems).filter(function(item, index) {
return index % 2 === 0;
});
console.log(array);
输出:
[li, li, li] // 只有第 0、2、4 个 li 元素被保留
这里 $listItems
是上下文对象,它能让我们方便地使用 filter()
方法筛选出符合要求的元素。而 toArray()
并不支持这种用法。
总而言之,toArray()
更适合用于将 jQuery 对象转换为数组,而 $.makeArray()
则更通用,适用于所有类数组对象。同时,如果你需要在转换时同时进行一些额外的计算,$.makeArray()
会更方便。
参考文献: