繁体   English   中英

为什么JavaScript不能将类似数组的对象转换为数组?

[英]Why does JavaScript not convert array-like objects to arrays?

在学习DOM操作时,我注意到诸如getElementByTagName或querySelectorAll之类的Document方法返回HTMLCollection或NodeList对象,无论它们看起来如何像数组,如果我们希望这些集合具有非常好的数组,则必须使用Arrays.from()将其转换为数组。有用的数组方法。 我想知道为什么会这样。 JS没有自动将这些集合转换为数组的特定原因吗?

编辑:已经提请我注意NodeList在所有主要浏览器中都有 forEach()

DOM集合具有自己的类型,而不是Array(或至少是数组子类)实例,因为它们与数组有很大的不同。 它们只是DOM上的视图 ,不是存储元素本身的容器。 它们是不可变的(即您不能在它们上使用.push() )甚至是实时视图(即它们始终代表文档当前状态下的选择)。 而且它们只能容纳DOM节点,不能像插入数组一样在其中放置任意值。

当然,它们类似于数组,因为它们具有索引属性和.length ,但这就是相似性结束的地方。 注意,只有JavaScript才允许您使用索引属性访问内容,根据纯语言不可知DOM,您将使用.item(index)方法。 这就是为什么DOM集合具有自己的层次结构,而与JavaScript内置的Array类型无关。

您希望将类似数组的DOM对象隐式转换为数组。 JavaScript是一个非常动态的语言,并自动执行许多此类转换。 这也是该语言在社区中如此令人讨厌的原因之一。 例如: 1 == "1"在Javascript中返回true。

因此,您提出的问题是确定我们应该在哪里划界的古老问题。

正如您自己指出的那样,您所需要做的就是调用Arrays.from以获取实际的数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM