Web前端编程:勿混淆NodeList与Array

  今日在博客园看了一篇<javascript:像操作Array一样操作NodeList>,发现有些问题,后来查阅了W3C标准,发现其混淆了DOM中的NodeList和javascript的Array。

  NodeList和Array是不同的东西。NodeList是DOM中定义的一个辅助对象,而Array是程序语言定义的一个数据结构。

  NodeList是DOM中定义一个对象,在W3C文档中可以看到:

  The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live.

  接口定义为:

1  interface  NodeList {
2    Node item( in  unsigned  long  index);
3     readonly  attribute unsigned  long  length;
4  };

  从上面的描述可以看到,W3C规定了NodeList的接口,如何实现依赖于各浏览器。现在各浏览器都实现了DOM,只是实现的Level不一样(DOM目前是Level3,Level3只有少部分浏览器支持其中的一部分功能)。

  所以,在实际编程中,不要把NodeList和Array对象混淆了。

  比如,在web编程中,可能我们会这么用:

1  var  divDoms  =  document.getElementsTagName( " div " );
2  for ( var  index = 0 ; i < divDom.length;i ++ )
3      //  do something
4 

  当得到divDoms对象后,其上的操作就向Array一样,误以为其为Array,而实际是不同的东西。

  另外,脚本语言并不能直接操纵DOM,而需要通过BOM(Brower Object Module),才能与浏览器窗口进行交互。DOM是有一些列Node构成的,而BOM则是有一些列Object对象构成。

你可能感兴趣的:(web前端)