В настоящее время я бы определенно использовал следующее:
Chrome, Firefox 3.5+, IE8 +
var elements = document.querySelectorAll('a');
for (var i = 0, element; (element = elements[i]); i++) {
console.log(element);
}
IE11 +, Firefox 24+, Chrome 30+ (с включенными экспериментами)
let elements = document.querySelectorAll('a');
for (let i = 0, element; (element = elements[i]); i++) {
console.log(element);
}
"element = elements [i]" предпочтительнее, чем "elements.length", так как:
"Списки узлов часто реализуются как итераторы узлов с фильтром. Это означает, что получение свойства типа length равно O (n), а перебор списка путем повторной проверки длины будет O (n ^ 2). «
В отличие от доступа к массиву, насколько я помню O (1).
Подробнее: