类数组以及将类数组转化为数组的方法

今天在学习的时候碰到一个新概念,类数组,我用document.querySelectorAll 获取元素的时候,以为返回的是数组,想用splice方法操作这个数组,发现不行,查了一下资料发现这个方法返回的不是数组,叫类数组。总结了一下,arguments函数

document.querySelectorAll、 document.getElementByTagName、 document.getElementsByName、 document.getElementsByClassName //返回的都是类数组,不能使用数组的一些方法,但是因为有interator接口,所以可遍历循环,那么怎么将一个类数组转换成数组呢?

一、遍历类数组,依次将元素放入一个空数组

1 let  ips = document.querySelectorAll('input')
2 
3     let divarr = []
4 
5     for(let i = 0; i <ips.length; i++){
6         divarr.push(ips[i])
7     }

//也可以用这种方法
for(let item of ips){
        divarr.push(item)
    }

二、用扩展运算符或者Array.from()方法转换

扩展运算符和Array.from()方法是ES6新增的,可将类数组直接转化为数组

 

1 let  ips = document.querySelectorAll('input')
2 
3     let divarr = []
4 
5     divarr = [...ips] 
6 7     divarr = Array.from(ips)

三、利用apply展开

 1 let ips = document.querySelectorAll('input') 2 3

let divarr = [].concat.apply([],ips); 

四、Array.prototype.slice.call() 

这种方法是借用了数组原型中的slice方法,返回一个数组。slice方法的内部实现:
1 Array.prototype.slice = function(start,end){
2   var result = new Array();  
3   start = start || 0;  
4   end = end || this.length; //使用call之后this指向了类数组对象
5   for(var i = start; i < end; i++){  
6        result.push(this[i]);  
7   }  
8   return result;  
9 }
var div1 = Array.prototype.slice.call(document.querySelectorAll('div'), 0);
var div2 = Array.prototype.slice.call(document.querySelectorAll('div'));
不积跬步无以至千里
原文地址:https://www.cnblogs.com/lyt0207/p/11812291.html