Javascript jquery中toArray和makeArray的区别

Javascript jquery中toArray和makeArray的区别,javascript,jquery,html,dom,Javascript,Jquery,Html,Dom,我试图将DOM元素转换为对象的集合。但是我不知道toArray()和makeArray()之间的主要区别是什么 HTML <div id="firstdiv"> <div>foo1</div> <div>foo2</div> <div>foo3</div> </div> 我不太明白他们之间的区别,我已经搜索了这个问题,但没有找到任何明确的解释 提前感谢。唯一的区别是: toArra

我试图将DOM元素转换为对象的集合。但是我不知道toArray()和makeArray()之间的主要区别是什么

HTML

<div id="firstdiv">
   <div>foo1</div>
   <div>foo2</div>
   <div>foo3</div>
</div>
我不太明白他们之间的区别,我已经搜索了这个问题,但没有找到任何明确的解释


提前感谢。

唯一的区别是:

toArray()
DOM元素方法
,您只能在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


根据jQuery文档:

toArray
是jQuery对象上的一个方法(它是一组DOM元素的包装器)。此方法将这组DOM元素的成员提取到javascript数组:

jQuery('.some-class').toArray() -> [ dom_el_1, dom_el_2, dom_el_3, ... ] 
makeArray
(jQuery对象上的“静态方法”)获取(jQuery、参数、节点列表等)并从中构造一个适当的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()
是用于jQuery对象的

$.makeArray()
类似于JS
Array.prototype.slice.call()
或简称
[].slice.call()
,尽管后者使用
[]
实例化对象

但是,当处理具有过多
长度
值的POJO时,存在差异

示例

一,

二,

三,

四,


因此,
$.makeArray()
只要在找不到具有特定索引的键时返回输入对象即可


只有在转换数组中具有适当项数的类似数组的对象时,它才能正常工作,例如函数的
参数
节点列表
、jQuery集合等。

.get()
.toArray()
?.toArray()和.get()之间是否有区别?.toArray()和.get()都返回jQuery结果集中的节点数组。get()接受可选的索引参数,在这种情况下,如果索引超出范围,它将返回位于
索引
位置的节点或
未定义的节点。
jQuery('.some-class').toArray() -> [ dom_el_1, dom_el_2, dom_el_3, ... ] 
// 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);
$.makeArray({ 0:'a', 1:'b', length:1 })
// ["a"]

[].slice.call({ 0:'a', 1:'b', length:1 })
// ["a"]
$.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]
$.makeArray({12:'a', 13:'b', length:1})
// { 12:'a', 13:'b', length:1 } // WUT?

[].slice.call({12:'a', 13:'b', length:1})
// [undefined]
$.makeArray({ 0:'a', 2:'b', length:2 })
// { 0:'a', 2:'b', length:2 } // WUT?

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