JavaScript : Вопрос 1 : 17

Сколько элементов будет в объектах elems1 и elems2 в результате выполнения этого кода и почему?

<!doctype html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <title>Yandex</title> 
</head> 
<body> 
    <a href="((http://yandex.ru))">Яндекс</a>, 
    <a href="((http://yandex.com))">Yandex</a> 
</body> 
</html> 
 
 
var elems1 = document.getElementsByTagName('a'), 
    elems2 = document.querySelectorAll("a"); 
 
document.body.appendChild(document.createElement("a")); 
 
console.log(elems1.length, elems2.length); 

 

Уважаемые учащиеся ниже Вы сможете увидеть ответ, перед тем, как ответить, пожалуйста, постарайтесь написать для себя ответ на черновике, и только потом сравните наш ответ с Вашим: 

 

Верно ли наше решение?

Ответ:

elems1.length == 3;
elems2.length == 2;
По сути оба метода представляют собой поиск элементов в документе. В данном случае ссылок. Однако метод getElementsByTagName() возвращает так называемую "живую коллекцию" элементов, т.е. при каждом вызове он снова выполняет поиск и в коллекцию добавляются элементы, которые появились в документе уже после присвоения.
Метод querySelectorAll() выполняет поиск единожды и, на момент присвоения, находит только два элемента "а". Если же выполнить поиск этим методом после создания нового элемента, querySelectorAll() вернет соответствующую истине коллекцию с тремя элементами.

Данный вопрос, входит в категорию тестовых вопросов компании Yandex, для соискателей на должность JavaScript-программиста.
1 балл


© Copyright © 2017 - 2019 Все права защищены. Бесплатное онлайн образование.