js 【详解】伪数组/类数组

伪数组的定义

类似数组一样,具有索引(下标)和length属性,但不具备数组方法(如push,shift,map等)的对象,被称为伪数组(或类数组)。

伪数组的范例

let fakeArray = {
    length: 3,
    "0": "first",
    "1": "second",
    "2": "third"
};
// 以下形式的对象,也是伪数组
var obj3 = { length: 0 };
var obj4 = { 0: '888', length: 1 };
var obj5 = { 99: 'abc', length: 100 }

伪数组可以使用for进行遍历

for (var i = 0; i < fakeArray.length; i++) {
    console.log(fakeArray[i]);
}

伪数组与数组进行对比 

伪数组 

fakeArray instanceof Array === false;
Object.prototype.toString.call(fakeArray) === "[object Object]";
Array.isArray(fakeArray) === false;

数组 

let arr = [1,2,3,4,6];
arr instanceof Array === true;
Object.prototype.toString.call(arr) === "[object Array]"
Array.isArray(arr) === true;

常见的伪数组

  • 函数的参数列表 arguments
  • DOM 对象列表(如通过 document.getElementsByTags 得到的列表,jQuery中的$("div"))

判断是否为伪数组

// 使用lodash
_.isArrayLike([1, 2, 3]);
// => true
 
_.isArrayLike(document.body.children);
// => true
 
_.isArrayLike('abc');
// => true
 
_.isArrayLike(_.noop);
// => false

 伪数组 => 真数组

// 伪数组 —— DOM对象列表
let fakeArr = document.getElementsByTagName('div');

 方式一:【ES6】 Array.from() 【推荐】

let realArr = Array.from(fakeArr);

方式二:使用Array.prototype.slice.call()方法

let realArr = Array.prototype.slice.call(fakeArr);

方式三:声明一个空数组,通过遍历伪数组把它们添加到新的数组中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朝阳39

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值