当前位置: 首页 > 知识库问答 >
问题:

javascript 为什么需要 Array-Like 这样的数据结构?

濮阳振海
2024-07-17

突然很好奇,在前端日常开发中,需要经常和 dom 打交道,所以经常要用到 querySelectorAlldocument.body.getChildren 等方法,但是它们的返回值都是一个类数组类型,我们就需要用一些方法,比如拓展运算符、Array.from 等将它们转换为真数组 来进行操作。

问题: 类数组的意义在哪里?dom 的哪些方法为什么不直接返回一个真数组呢?

共有1个答案

仇龙光
2024-07-17
  1. 兼容性:早期的 Javascript 的数组很简陋,所以很多早期的 API 都没有考虑数组。例如函数的 arguments 对象也是类数组。而 ES6 的剩余参数就是数组
  2. 性能考虑:类数组相较与数组有更好的性能,可以提高 DOM 操作的效率
  3. API 设计:DOM 被设计为不依赖于任何特定语言

尽管 DOM API 看起来与 JavaScript 绑定,但它实际上仅仅是“使用”了 JavaScript 而已。DOM API 规范由 W3C 制定,而 JavaScript 标准由 TC39 委员会制定。他们是两个互不统属的独立组织。JavaScript 标准中不会包含 HTMLElement 等 DOM 相关的东西,DOM API 亦不会依赖于 JavaScript。

 类似资料:
  • 问题内容: 示例1中的问题是“ this”引用了全局名称而不是myName对象。 我了解在将this的值设置为特定对象时使用bind()的方法,因此它可以解决示例1中的问题,但是为什么首先会出现此问题?这仅仅是创建Javascript的方式吗? 我还想知道为什么示例3解决了这个问题,以及示例2和示例3之间的区别。 问题答案: 为什么需要JavaScript bind()? 值是决定 如何 一个功能

  • 我对RabbitMQ这样的消息代理并不熟悉,我们可以使用它为Celery这样的调度系统创建任务/消息队列。 现在,问题是: > 我可以在PostgreSQL中创建一个表,该表可以添加新任务,并由消费者程序(如Celery)使用。 null Redis也可以用作消息代理吗?我发现它更类似于Memcached,而不是rabbitMQ。 请把这件事说清楚!

  • 任何数据库都需要备份,备份数据是维护数据库必不可少的操作。 在学习如何备份数据之前,我们先了解一下数据库备份是为了应对哪些场景?为什么数据库需要备份? 备份就是为了防止原数据丢失,保证数据的安全。当数据库因为某些原因造成部分或者全部数据丢失后,备份文件可以帮我们找回丢失的数据。因此,数据备份是很重要的工作。 常见数据库备份的应用场景如下。 数据丢失应用场景: 人为操作失误造成某些数据被误操作 软件

  • 问题内容: 我已经知道(困难的方式)需要在JSON数据周围添加括号,如下所示: (至少在Firefox 3中)。 这是什么原因呢?我讨厌写代码而又不了解幕后花絮。 问题答案: 放在括号内实际上等效于 如果要在没有括号的情况下进行评估,则将对代码进行评估,并且如果其中确实有任何命名函数,则将对其进行定义,但不会返回。 举例来说,可以像创建函数一样调用函数: 将调用刚刚定义的函数。但是,以下内容不起作

  • 下面的代码将输出“true”,这意味着Array()为true。在Python中,list()为False,这是否只是因为语言设计者的偏好?

  • 问题内容: 我可以将数据发送到服务器,但是只有在使用FromBody-Attribute时才可以。 为什么无法使用Post从主体自动读取json数据? 后端Web API 前端angularjs 问题答案: 仅因为某事是POST请求,所以没有明确的规则如何传递参数。POST请求仍可以包含URL中编码的查询参数。方法参数应该是“简单”类型(字符串,整数等)的查询参数。 通常,复杂类型应该是POST表