когда можно использовать for(var k in arr)
на сколько я знаю в JS нет такого понятия как многомерный массив, есть только обьекты,
но частенько появляется необходимость обработать этот объект в цыкле, когда там только цыфорки(в индексе), то обрабатывается всё так for(var k=0; k<arr.length; k++), но когда в индеексе слова обрабатывается так for(var k in arr) если не правильно обрабатывать объект то броузер скажет "не хочу работать", скажите как определить когда как обрабатывать объект. только не так как я это сейчас определяю методом тыка. |
Каша какая-то у вас в голове.
Есть массив ([] или new Array()), а есть объект-хэш ({} или new Object()). Цитата:
|
Цитата:
|
ни разу не приходилось обрабатывать одной функцией и массивы и объекты и определять ещё что это. Просто надо грамотно спроектировать структуру данных, с которой будешь работать...
|
попробуй запустить эту функцию,
и поймёшь о чём я говорю, 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+')'); } |
Цитата:
Цитата:
[] instanceof Array |
function isObject(o){return typeof o=="object"}
function isArray(o){return isObject(o) && o.constructor.prototype.hasOwnProperty('length')} |
вот так получше и если вызвать эту функцию из дочернего фрейма, то сработает... А если вызвать функцию в которой будет [] instanceof Array, то в другом документе (фрейме), свой инстанс - не сработает..
|
Цитата:
var BadArray = function() {}; BadArray.prototype = {length: 0}; isArray(new BadArray()); // ??? Свойство length может быть у любого объекта на вполне законных основаниях. |
Это естественно, но другого нормального метода нет. Иначе надо проверять элемент в контексте документа, где он создан... Геморрой придумывает разработчик сам себе.
Я уже ранее сказал, что я с таким никогда не сталкивался, так как просто надо заранее подумать "а нафига такие извращения". |
Часовой пояс GMT +3, время: 02:53. |