Показать сообщение отдельно
  #1 (permalink)  
Старый 26.10.2014, 16:18
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от terminator-101
 
Регистрация: 14.10.2014
Сообщений: 117

Массив (html-коллекция) элементов. Нафига они сделали ЭТО?
<html>
<head>
<title> test </title>

</head>
    <body >
<p>foo</p>
<p>foo</p>
<p>foo</p>
<p>foo</p>
<p>foo</p>
<p>foo</p>
<p>foo</p>
<p>foo</p>
<p>foo</p>
<p>foo</p>
<p>foo</p>
<p>foo</p>
<script>

//p=document.querySelectorAll("p")
p=document.getElementsByTagName("p")
for(i in p){
if(!(p.hasOwnProperty(i))) break
console.log(p[i])
p[i].style.background="red" // Uncaught TypeError: Cannot set property 'background' of undefined
}
</script>
    </body>
</html>

На последней ирерации валится с ошибкой. Они засунули свойство lenght прямо в объект. Почему не в прототип??? Делаю вот так

if((!(p.hasOwnProperty(i))||i==="length")) break

Все работает. Но я не понимаю, нахера нужно было засовывать в итерируемый объект это свойство? Они специально издеваются, или просто мозга нет? Проверил и для document.querySelectorAll и для
document.getElementsByTagName, работает одинаково.

А какие еще сюрпризы можно ожидать в браузерах от этих мудаков?
Ответить с цитированием