这篇文章给大家介绍详javascript中解的类数组,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
什么是类数组
顾名思义,这玩意儿肯定是个长得像数组,但又不算数组的东西。那到底是个啥,其实它就是一个对象,一个长的像数组的对象。
和数组的区别
那类数组和数组有啥区别:
1,都有长度属性
2类数组也可以对循环遍历,有的类数组还可以通过的遍历
3类数组不具备数组的原型方法,因此类数组不可调用相关数组方法(如,推、slicec concat等等)
都有哪些类数组
常见的类数组有
- <李>
函数的参数参数
李> <李>通过getElementsByTagName, getElementsByClassName, getElementsByName等方法获取的dom列表(也叫HTMLCollection)
李> <李>通过querySelectorAll()方法获取的节点列表节点列表
下面,我们来分别看一下这3类类数组
<强>参数强>
参数是javascript的一个关键字。专指函数的参数集合,它包含了函数的所有参数以及其他属性。它无需定义,可直接在函数体内使用
function 参数(a, b, c), { console.log(参数) console.log (typeof 参数) console.log ({} .toString.call(参数) } args(& # 39;一个# 39;,,& # 39;b # 39;,, & # 39; c # 39;)
我们看看输出结果
可以看的出,参数包含所有参数,并且存在长度属性,同时可以看的出,他的类型是对象,并且转换为字符串后是对象参数,代表是参数对象。同时,可以看的到,他还有一个属性被,而这个属性的值好像就是我们定义的这个函数体,那么我们输出看一下
function 参数(a, b, c), { console.log (arguments.callee) } args(& # 39;一个# 39;,,& # 39;b # 39;,, & # 39; c # 39;)
可以看的到,输出的确实是我们函数自己。那既然表示的自己,请不要随便去调用这个属性,因为一旦调用,会不断的调用自己,进入死循环,直到栈溢出。就像下面这样
function args (a, b, c), { ,console.log (123) ,arguments.callee () } args(& # 39;一个# 39;,,& # 39;b # 39;,, & # 39; c # 39;)
<强> dom列表(HTMLCollection) 强>
这一类是指通过getElementsByTagName或者getElementsByClassName或者getElementsByName获取到的dom列表的集合。
& lt; div>今天天气不太好& lt;/div> & lt; div>因为下雨了& lt;/div> & lt; script> ,var domList =, document.getElementsByTagName (& # 39; div # 39;) ,console.log (domList) ,console.log (typeof domList) ,console.log ({} .toString.call (domList)) & lt;/script>
可以看的出,domList也存在长度属性,并且,转换为字符串后是对象HTMLCollection。代表是HTMLCollection对象
<强>节点列表(节点列表)强>
通过document.querySelectorAll()所获取的节点的集合
& lt; div 类=癮bc"在今天天气不太好& lt;/div> & lt; div 类=癮bc"祝辞因为下雨了& lt;/div> & lt; script> ,var nodeList =, document.querySelectorAll (& # 39; div # 39;) ,console.log(节点列表) ,console.log (typeof 节点列表) ,console.log ({} .toString.call(节点列表) & lt;/script>
可以看的出,节点列表同样存在长度属性,且转换后成字符串是对象节点列表,代表是节点列表对象。该对象是一个符合迭代器接口规范的对象,故它可以…的被遍历(什么是迭代器我就不在这里讲述了,大家可以自己去看什么是迭代器)
特点
类数组都不存在数组的原型方法,但当类数组需要调用数组方法去做任何事情时,可以通过以下方式
- <李>
利用电话,申请进行方法借用,借用数组的各自方法
李> <李>将类数组转换为数组。然后再调用数组方法