📜  jQuery 中的 toArray 和 makeArray 有什么区别?(1)

📅  最后修改于: 2023-12-03 14:43:16.722000             🧑  作者: Mango

jQuery 中的 toArray 和 makeArray 有什么区别?

在 jQuery 中,toArray()$.makeArray() 都用于将集合转换为数组,但它们在实现上有一些区别。

toArray()

toArray() 是 jQuery 实例对象上的方法,它将当前的 jQuery 集合转换为原生的 JavaScript 数组。示例:

var $listItems = $('li');
var array = $listItems.toArray();
console.log(array);

输出:

[li, li, li, li, li]
$.makeArray()

$.makeArray() 是 jQuery 工具函数,它将一个类数组对象(例如 arguments 对象、DOM 集合或字符串)转换为真正的数组。示例:

var arrayLikeObj = {0:'zero', 1:'one', length: 2};
var array = $.makeArray(arrayLikeObj);
console.log(array);

输出:

['zero', 'one']
区别比较
  1. toArray() 只能用于 jQuery 对象,而 $.makeArray() 可以用于任何类数组的对象。

  2. toArray() 的实现方式相对简单,只需通过 .slice() 方法将集合转换为数组。而 $.makeArray() 的实现更复杂,它会先尝试调用对象上的 toArray 方法,然后再把剩下的值 push 进一个新数组。

  3. $.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() 会更方便。

参考文献: