JavaScript 中的类数组是什么

类数组是有一个 length 属性和从零开始索引的属性,但是没有 Array 的内置方法,比如 forEach()map() 等的一种特殊对象

特征

  • 是一个普通对象(不是函数,不是数组,最基本的 {} 对象)
  • 必须有 length 属性,可以有非负整数索引
  • 本身不具备数组所具备的方法

常见的类数组

arguments

function person(name, age, sex) {
  console.log('arguments: ', arguments);
  console.log('type: ', Object.prototype.toString.call(arguments));
}
person('Jae', 23, 'boy'); 

输出结果如下:
在这里插入图片描述

可以看到,arguments 是有 length 属性的,但是没有数组所具备的方法

Dom 相关

例如 NodeList、HTMLCollection、DomTokenList 等

在这里插入图片描述

类数组和数组的区别

方法/特征数组类数组
自带方法多个方法
length属性
toString[object Array][object Object]
instanceofArrayObject
constructor[Function: Array][Function: Object]
Array.isArraytruefalse

类数组如何转为数组

  • slice、concat 等
  • Array.from
  • Array.apply
  • 复制遍历

来一个一个看看效果:

slice、concat

const arr = {
  length: 2,
  0: 1,
  1: 2
};
const arr1 = Array.prototype.slice.call(arr);
console.log(arr1); // [1, 2]

const arr2 = Array.prototype.concat.apply([], arr);
console.log(arr2); // [1, 2]

Array.from

const arr = {
  length: 2,
  0: 1,
  1: 2
};
console.log(Array.from(obj)); // [1, 2]

Array.apply

const arr = {
  length: 2,
  0: 1,
  1: 2
};
console.log(Array.apply(null, arr)); // [1, 2]

遍历

let result = [];
const arr = {
  length: 2,
  0: 1,
  1: 2
};
for (let i = 0; i < arr.length; i++) {
  result[i] = arr[i]
}
console.log(result); // [1, 2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大杯美式不加糖

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

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

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

打赏作者

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

抵扣说明:

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

余额充值