Разница между 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()
просто возвращает объект ввода, когда ключ с определенным индексом не найден