javascript возвращает в IE8 — объект не поддерживает это свойство или метод

var result = Object.prototype.toString.call(nodes);
return (
    typeof nodes === 'object'
    &&
    /^\[object (HTMLCollection|NodeList|Object)\]$/.test(result)
    &&
    nodes.hasOwnProperty('length')
    &&
    (nodes.length == 0 || (typeof nodes[0] === "object" && nodes[0].nodeType > 0))
)

Это правильно работает в Chrome, но выдает ошибку в IE8 (вероятно, и 7). Ошибка происходит в строке return.

Это я украл откуда-то здесь (постараюсь найти ссылку). Предполагается определить, является ли данный объект (nodes) списком узлов. Много результатов для этой ошибки, но я не мог найти для этого случая. У кого-нибудь что-нибудь выскакивает?

Спасибо!


person Randy Hall    schedule 19.11.2012    source источник
comment
Вот исходная статья, из которой я получил тестовую функцию: stackoverflow. com/questions/7238177/   -  person Randy Hall    schedule 19.11.2012
comment
Какой объект не поддерживает какое свойство или метод?   -  person Musa    schedule 19.11.2012
comment
Возможно, эта ссылка содержит решение вашей проблемы. Хотя это и не связано с проверкой нодлистов, ваше включение использования hasOwnProperty вызвало кое-что в моей памяти. В IE8 это работает только для объектов, отличных от Host, но в комментариях есть обходной путь: stackoverflow.com/questions/8157700/   -  person Rick Petersen    schedule 19.11.2012
comment
@Musa хороший улов, обновленный вопрос.   -  person Randy Hall    schedule 19.11.2012
comment
@Musa: IE на самом деле не говорит вам. Это просто говорит об этом.   -  person Rocket Hazmat    schedule 19.11.2012
comment
@RocketHazmat: Если бы кто-то использовал инструменты разработчика F12 и отладил код, вы бы точно знали, что вызывает ошибку.   -  person Cᴏʀʏ    schedule 19.11.2012
comment
@Cory: Используете инструменты разработчика IE? Мне никогда не удавалось использовать их для отладки чего-либо.   -  person Rocket Hazmat    schedule 19.11.2012


Ответы (1)


Благодаря @STLRick:

Object.prototype.hasOwnProperty.call(nodes, 'length')

вроде исправил! По крайней мере, он больше не выдает ошибку. Не уверен на 100%, влияет ли это на проверку узла, но в нескольких тестовых случаях, которые я выполняю, это работает!

person Randy Hall    schedule 19.11.2012
comment
Думаю, я должен был опубликовать это как ответ, а не комментарий;) Рад, что это помогло! - person Rick Petersen; 19.11.2012