<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, работает одинаково.
А какие еще сюрпризы можно ожидать в браузерах от этих мудаков?