Ответ
querySelector возвращает первый элемент, соответствующий CSS-селектору, а querySelectorAll — все элементы. getElementById ищет по ID, getElementsByClassName — по классу (возвращает живую коллекцию).
Ключевые отличия:
querySelectorуниверсален (любые CSS-селекторы)getElementByIdбыстрее для поиска по IDgetElementsByClassNameвозвращает живую коллекцию (изменяется при DOM-мутациях)querySelectorAllвозвращает статичный NodeList
Пример:
// Все варианты вернут один и тот же элемент
document.querySelector('#header');
document.getElementById('header');
// Но querySelector гибче:
document.querySelector('.menu-item.active');