2013-05-22 5 views
1

Извините, если это дубликат - поиск непросто.collection item() vs array []

Сегодня я наткнулся на два вопроса, используя someArrayOrCollection.item(i) вместо моего предпочтительного someArrayOrCollection[i]

Пример: parse XML attribute value using javascript

var sTitle1 = item.getElementsByTagName("title").item(0).... 

, где я хотел бы использовать

var sTitle1 = item.getElementsByTagName("title")[0].... 

Последний раз, когда я видел их там, где, когда только IE поддерживал эту нотацию.

Мой первый инстинкт, когда я вижу .item(), должен исправить его до []. Должен ли я или это безвредно или, возможно, даже самая лучшая практика в наши дни?

Интересно почти все коллекции в MDN упоминает метод item но примеры их использования [] - например https://developer.mozilla.org/en-US/docs/Web/API/NodeList

+0

Действительно ли они использовали массив? Могут ли они использовать тип объекта, который использует '.item()' accessor и не имеет '[]' accessor? – doppelgreener

+3

Вы говорите о '.item()' в коллекции dom? Это не то же самое, что просто массив. 'Array.prototype' не имеет функции элемента. –

+1

Поскольку '.item()' относится только к коллекциям (возможно, не ко всем из них), лучше использовать '[i]', потому что он поддерживается всеми. Я предполагаю, что вы смотрите на «HTMLCollection»: https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection – Ian

ответ

3

Для NamedNodeMaps[] действует как сахар для обоих .item и .getNamedItem, что позволяет строить надуманный пример, где индекс будет отличаться от .item:

<div id="x" 2e0="wtf" class="foo" ></div> 

<script> 
a = document.getElementById("x").attributes; 
console.log(a["2e0"].nodeValue)   // wtf 
console.log(a.item("2e0").nodeValue) // foo 
</script> 

Излишне говорить, что это чисто теоретический, в реальной жизни [] является безопасным выбором.

+0

+1 для выражения 'sugar';) – mplungjan