Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   когда можно использовать for(var k in arr) (https://javascript.ru/forum/misc/1655-kogda-mozhno-ispolzovat-var-k-arr.html)

scuter 29.08.2008 11:25

когда можно использовать for(var k in arr)
 
на сколько я знаю в JS нет такого понятия как многомерный массив, есть только обьекты,
но частенько появляется необходимость обработать этот объект в цыкле,
когда там только цыфорки(в индексе),
то обрабатывается всё так
for(var k=0; k<arr.length; k++)
,
но когда в индеексе слова обрабатывается так
for(var k in arr)

если не правильно обрабатывать объект то броузер скажет "не хочу работать",
скажите как определить когда как обрабатывать объект.

только не так как я это сейчас определяю методом тыка.

Kolyaj 29.08.2008 11:28

Каша какая-то у вас в голове.

Есть массив ([] или new Array()), а есть объект-хэш ({} или new Object()).

Цитата:

Сообщение от scuter
на сколько я знаю в JS нет такого понятия как многомерный массив

[[],[],[],[]] - двумерный массив.

Autosof 29.08.2008 11:42

Цитата:

Сообщение от scuter (Сообщение 5118)
скажите как определить когда как обрабатывать объект

typeof?

ZoNT 29.08.2008 11:58

ни разу не приходилось обрабатывать одной функцией и массивы и объекты и определять ещё что это. Просто надо грамотно спроектировать структуру данных, с которой будешь работать...

scuter 29.08.2008 12:03

попробуй запустить эту функцию,
и поймёшь о чём я говорю,
test = function()
{
	var arr = [[],[],[]];
	alert('arr = ('+typeof arr+')');
	var arr2 = new Array();
	alert('arr2 = ('+typeof arr2+')');
	var obj = {};
	alert('obj = ('+typeof obj+')');
	var obj2 = new Object();
	alert('obj2 = ('+typeof obj2+')');
}

Kolyaj 29.08.2008 12:14

Цитата:

Сообщение от Autosof
typeof?

Цитата:

Сообщение от ZoNT
function isArray(o){return isObject(o) && o.length && (!isString(o))}

Исходных кодов а-ля jQuery начитались?

[] instanceof Array

ZoNT 29.08.2008 12:18

function isObject(o){return typeof o=="object"}
function isArray(o){return isObject(o) && o.constructor.prototype.hasOwnProperty('length')}

ZoNT 29.08.2008 12:20

вот так получше и если вызвать эту функцию из дочернего фрейма, то сработает... А если вызвать функцию в которой будет [] instanceof Array, то в другом документе (фрейме), свой инстанс - не сработает..

Kolyaj 29.08.2008 13:01

Цитата:

Сообщение от ZoNT
function isArray(o){return isObject(o) && o.constructor.prototype.hasOwnProperty('length')}

var BadArray = function() {};
BadArray.prototype = {length: 0};
isArray(new BadArray()); // ???


Свойство length может быть у любого объекта на вполне законных основаниях.

ZoNT 29.08.2008 13:20

Это естественно, но другого нормального метода нет. Иначе надо проверять элемент в контексте документа, где он создан... Геморрой придумывает разработчик сам себе.
Я уже ранее сказал, что я с таким никогда не сталкивался, так как просто надо заранее подумать "а нафига такие извращения".


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