一、何为类数组?
(1)类数组具有length属性,其他的属性是非负的整数
(2)类数组不具有数组的方法
常见的类数组有通过dom操作的返回值,arguments等
二、类数组和数组的区分方法
var lei=document.getElementsByClassName("lei");
var arr=[1,2,3,4];
// 1、利用instanceof
console.log(lei instanceof Array);//false
console.log(arr instanceof Array);//true
// 2、利用constructor
console.log(lei.constructor===Array);//false
console.log(arr.constructor===Array);//true
// 3、利用toString方法
console.log(Object.prototype.toString.call(lei));//[object HTMLCollection]
console.log(Object.prototype.toString.call(arr));//[object Array]
// tostring方法也常用来区分数组和对象
var object=new Object();
console.log(Object.prototype.toString.call(object));//[object Object]
// 4、isArray()
console.log(Array.isArray(lei)); //false
console.log(Array.isArray(arr)); //true
三、类数组转换为数组
/ 1、循环
var tranlei=[];
for(var i=0;i<lei.length;i++){
tranlei.push(lei[i]);
}
console.log(tranlei);
console.log(tranlei instanceof Array);//true
//2、slice()
var tranlei1=Array.prototype.slice.call(lei);
console.log(tranlei1);
console.log(tranlei1 instanceof Array);//true
3、es6中的from(),第一个参数为要转化的类数组,第二个参数类似于map()可以对每个元素进行处理,将处理后的值放入返回的数组,Array.from()
的另一个应用是,将字符串转为数组,然后返回字符串的长度
tranlei2=Array.from(lei,(s)=>{
console.log(s.innerHTML);
});
console.log(tranlei2 instanceof Array);//true
var str="123kkaklown";
console.log(Array.from(str).length); //11