Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   различить нодколлекцию от объекта (https://javascript.ru/forum/misc/21335-razlichit-nodkollekciyu-ot-obekta.html)

float 05.09.2011 19:24

различить нодколлекцию от объекта
 
в своей либе использую функцию type.

сейчас, за неимением лучшего варианта, нодколлекция детектится по св-ву length...

есть конечно более надёжные и красивые решения, но для них есть дёготь, в виде ie7-8. В них нодколлекция: [object Object]...
В общем если есть умные идеи - поделитесь.

ваый 05.09.2011 19:43

Object.prototype.toString.call(some) === "[object Array]"
Если some - настоящий массив, то будет true. Для массивоподобных структур типа arguments или node collection, возвращаемой, например, document.getElementsbyTagName('div'), будет - false.

float 05.09.2011 19:47

Цитата:

Object.prototype.toString.call
Возвращаемое значение разнится от браузера к браузеру.
Я кстати не оч понял почему Array?

ваый 05.09.2011 19:55

Цитата:

Сообщение от float
Я кстати не оч понял почему Array?

Мы вызываем toString в контексте (.call(some)) той штуки, которую хотим проверить. Для массивов (some = [1, 2, 3], например) toString возвращает строку "[object Array]". Для остальных нет.

float 05.09.2011 19:59

так нодколлекция ж объект вроде у всех:)

ваый 05.09.2011 20:00

а, я решил, что ты от массива хочешь отличить (что обычно бывает нужно :)

float 05.09.2011 20:01

А всё. Не заметил. Ты не правильно понял. Я хочу коллекцию от нативного объекта отличить. Если она отличается....

float 05.09.2011 20:01

:)

ваый 05.09.2011 20:03

Object.prototype.toString.call(document.getElementsByTagName('div')) == "[object NodeList]"

так пробовал?

Octane 05.09.2011 20:06

В IE<9 можно так:
var list = document.getElementsByTagName("*"), array = [];

function isLtIE9DOMObj(obj) {
	return Object(obj) === obj && !(obj instanceof Object);
}

console.log(isLtIE9DOMObj(list));
console.log(isLtIE9DOMObj(array));


Часовой пояс GMT +3, время: 10:24.