Массив (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, работает одинаково. А какие еще сюрпризы можно ожидать в браузерах от этих мудаков? |
Ну ты же неумный. Коллекции элементов, как и массивы, перебираются через обычный for или for of в современных браузерах.
|
Erolast,
Ну и что, что они перебираются? Это не значит, что их нельзя перебирать for in. И к вопросу это отношения не имеет. Нахрена имплементаторы засунули с-во length прямо в основной объект? В этом необходимость была, или чо? |
Меня тоже этот вопрос беспокоил.
Вот тут можно почитать детали: https://code.google.com/p/chromium/i...tail?id=339202 Цитата:
|
По сути проблема не только в length. Проблема во всех DOM-объектах со всеми свойствами и методами. Есть примеры исключений?
|
Цитата:
И еще раз, фор ин - частный случай, клинический случай - in. if('length' in p) - не имею права? Идите плачьте в унитаз. |
Ему лень написать свой foreach на фор лупах, будет волосы на ж рвать вписывая проверки на все что еще ему вперде попадется.
Кстати, в коллекциях маст хэв метод item(). Я вроде видел что и коллекции этих элементов такой имеют. Если item() есть, то почему не юзаете? |
как-то долго прожил очередной аккаунт foo :)
|
Наверно можно подводить итог под темой =)
<img src="http://national-travel.ru/wp-content/uploads/2010/12/belki-isteryhki.jpg"></img><br> <img src="http://www.netlore.ru/upload/files/19/3_233.jpg"></img> |
kostyanet, про foreach это верно, но факт что в реализациях косяк. Так не должно быть. Но он нормальным людям не мешает, так что нет смысла исправлять.
Цитата:
alert('length' in document.images); alert('length' in []); Так что сам поплачь ) |
Часовой пояс GMT +3, время: 09:26. |