Разница между toArray и makeArray в jquery

Я пытаюсь преобразовать элемент DOM в коллекции объектов. Но я не знаю, в чем основное различие между toArray() и makeArray()

HTML-код

<div id="firstdiv">
   <div>foo1</div>
   <div>foo2</div>
   <div>foo3</div>
</div>

я использовал следующий код для преобразования узлов в массив:

в jQuery

console.log($("#firstdiv > div").toArray());
console.log($.makeArray($("#firstdiv").html()));

Я не могу понять разницу между ними, и я искал этот вопрос, но не нашел внятных объяснений.

спасибо предварительно.

3 ответов


согласно документации jQuery:

toArray - это метод объекта jQuery (который является оболочкой вокруг набора элементов DOM). Этот метод извлекает члены этого набора элементов DOM в массив javascript:

jQuery('.some-class').toArray() -> [ dom_el_1, dom_el_2, dom_el_3, ... ] 

makeArray (который является" статическим методом " для объекта jQuery) принимает массив-как объект (jQuery, arguments, nodeList,...) и создает из него правильный массив javascript, поэтому вы можете вызывать методы массива на результат:

// returns a nodeList (which is array like item) but not actual array
// you can't call reverse on int
var elems = document.getElementsByTagName("div"); 
var arr = jQuery.makeArray(elems);
arr.reverse(); // use an Array method on list of dom elements
$(arr).appendTo(document.body);

в целом, toArray преобразование набор элементов jQuery на javascript Array, makeArray превращает любую массив как объект на javascript Array.


единственная разница:

toArray() is DOM Element Methods и вы можете использовать его только на элементах dom. в то время как makeArray(object) можно использовать на пользовательские объекты.

нет никаких других различий, они в основном одинаковы и возвращают простой объект массива.

пример

у вас есть любой пользовательский объект:

function Person(name,age) {
  this.name = name;
  this.age = age;
}
var obj=new Person('abc',1);

теперь использовать обе функции:

jQuery.makeArray(obj).length;  //would return 1

в то время как:

obj.toArray().length;  //through the error function not defined

и

obj.length; //return undefined

как уже было сказано toArray() для объектов jQuery.

$.makeArray() похоже на JS Array.prototype.slice.call() или [].slice.call() для краткости (за исключением того, что последний создает экземпляр объекта)

но есть разница при обработке POJOs с чрезмерным length стоимостью

примеры: {

длина: 5,

0:

$.makeArray({ 0:'a', 1:'b', length:1 })
// ["a"]

[].slice.call({ 0:'a', 1:'b', length:1 })
// ["a"]

, 1:

$.makeArray({ 0:'a', 1:'b', length:4 })
// { 0:'a', 1:'b', length:4 } // WUT?

[].slice.call({0:'a', 1:'b', length:4})
// ["a", "b", undefined, undefined]

, 2:

$.makeArray({12:'a', 13:'b', length:1})
// { 12:'a', 13:'b', length:1 } // WUT?

[].slice.call({12:'a', 13:'b', length:1})
// [undefined]

, 3:

$.makeArray({12:'a', 13:'b', length:1})
// { 12:'a', 13:'b', length:1 }  // WUT?

[].slice.call({12:'a', 13:'b', length:1})
// [undefined]

, 4:

$.makeArray({ 0:'a', 2:'b', length:2 })
// { 0:'a', 2:'b', length:2 } // WUT?

[].slice.call({ 0:'a', 2:'b', length:2 })
// ["a", undefined]

}

$.makeArray() просто возвращает объект ввода, когда ключ с определенным индексом не найден