Javascript为什么使用NodeList而不是使用数组

时间:2014-02-14 00:27:39

标签: javascript dom

我已阅读该文档,并未完全理解使用NodeList的优势。

因为它就像数组(我知道它不是数组),使用NodeList有什么好处呢?

3 个答案:

答案 0 :(得分:2)

NodeList实际上不是一个vanilla javascript构造,因为它是DOM API的一部分。与ecma规范不包含[HtmlElement]等类型的方式类似,它也不会提到NodeList。

您会发现它位于DOM API的World Wide Web Consortium (W3C)文档中。

public interface NodeList

  

NodeList接口提供有序节点集合的抽象,而不定义或约束此集合的实现方式。 DOM中的NodeList对象是实时的。

你不能(据我所知)创建一个NodeList。您可以访问一个,但不能创建一个供您自己使用。在这方面,这就是为什么数组在javascript中使用。

NodeLists将成为访问DOM中“实时”节点列表的结果。这意味着列表将在您更改时自动更新,或者在没有任何额外检测的情况下自动更改。

答案 1 :(得分:2)

只有在DOM返回一个NodeList时才使用NodeList。为什么DOM不返回一个Array或至少一个在其原型链中有Array的类型?因为DOM的设计不依赖于任何特定语言。 DOM API返回的所有类型都是主机类型而不是本机类型。这允许DOM与语言无关,并且不依赖于任何特定的语言构造。

当然,您可以通过调用或应用在NodeList上使用Array方法。 E.g。

Array.prototype.map.call(nodeList, function (a, index) { ... });

“实时”NodeLists的另一个有趣属性是NodeList与返回它的API调用之间保持的数据绑定。此数据绑定会导致NodeList自动更新,以响应可能影响调用返回的节点的DOM操作。

答案 2 :(得分:1)

请参阅:http://www.w3schools.com/dom/dom_nodelist.asp

NodeList的好处:

  

节点列表使自己保持最新状态。如果删除或添加元素,则在节点列表或XML文档中,列表会自动更新。

Array个节点没有。

更多信息:http://toddmotto.com/a-comprehensive-dive-into-nodelists-arrays-converting-nodelists-and-understanding-the-dom/

作者建议不要使用NodeLists,我不这样做。然而,这是一个很好的阅读,因为他的见解方法和代码示例应该能够轻松掌握ArrayNodeList之间的差异。