我最近开始了一项新工作,致力于基于浏览器的应用程序,并且仍在学习Javascript的要点。我有一个问题,关于遵循规范的JS解释器应如何处理以下代码段。
node_list_foo = document.getElementsByName("bar");
//node_list_foo is now a node list with a length of lets say 3.
var element_from_item = NodeListFoo.item(4);
//element_from_item is now NULL according to [url]https://dom.spec.whatwg.org/#interface-nodelist[/url]
var element_from_index = NodeListFoo[4];
// my broswers are setting element_from_index to undefined in this case, but what should it be?
https://dom.spec.whatwg.org/#interface-nodelist似乎将超出范围索引的行为的定义推迟到支持财产索引的定义,我读对了吗?
https://heycam.github.io/webidl/#dfn-supported-property-indices这样说是关于使用数组样式语法通过getter访问对象。 NodeList有一个相关的获取器-item(index)。
如果使用带有> identifier的操作指定了索引属性获取器,则使用给定的> supported属性索引对对象建立索引时返回的值将是通过调用>操作返回的值,将索引传递为它唯一的论点。如果用于声明索引属性getter的操作没有标识符,则接口定义必须随附有关如何确定给定索引的索引属性值的描述。
如果我没看错,那么规范说这两种访问方法的行为应该是相同的?所以两者都应该返回未定义?
奇怪的是,https://developer.mozilla.org/en-US/docs/Web/API/NodeList记录了观察到的行为,而不是我认为规范要求的行为。
对规范的正确解释是什么,我还应该采取另一种方法来发现这类事物如何工作吗?
最后,如果我对规范的解释正确;似乎没有人真正遵循使用数组样式语法的规范。因此,作为偏执狂和完美主义者的程序员,我应该使用nodelist.item(x)作为首选方法吗?