Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.08.2008, 10:25
Аватар для scuter
Профессор
Отправить личное сообщение для scuter Посмотреть профиль Найти все сообщения от scuter
 
Регистрация: 14.03.2008
Сообщений: 169

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

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

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

Последний раз редактировалось scuter, 29.08.2008 в 10:40.
Ответить с цитированием
  #2 (permalink)  
Старый 29.08.2008, 10:28
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

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

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

Сообщение от scuter
на сколько я знаю в JS нет такого понятия как многомерный массив
[[],[],[],[]] - двумерный массив.
Ответить с цитированием
  #3 (permalink)  
Старый 29.08.2008, 10:42
Интересующийся
Отправить личное сообщение для Autosof Посмотреть профиль Найти все сообщения от Autosof
 
Регистрация: 23.08.2008
Сообщений: 20

Сообщение от scuter Посмотреть сообщение
скажите как определить когда как обрабатывать объект
typeof?
Ответить с цитированием
  #4 (permalink)  
Старый 29.08.2008, 10:58
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 24.07.2008
Сообщений: 1,271

ни разу не приходилось обрабатывать одной функцией и массивы и объекты и определять ещё что это. Просто надо грамотно спроектировать структуру данных, с которой будешь работать...
Ответить с цитированием
  #5 (permalink)  
Старый 29.08.2008, 11:03
Аватар для scuter
Профессор
Отправить личное сообщение для scuter Посмотреть профиль Найти все сообщения от scuter
 
Регистрация: 14.03.2008
Сообщений: 169

попробуй запустить эту функцию,
и поймёшь о чём я говорю,
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+')');
}
Ответить с цитированием
  #6 (permalink)  
Старый 29.08.2008, 11:14
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Autosof
typeof?
Сообщение от ZoNT
function isArray(o){return isObject(o) && o.length && (!isString(o))}
Исходных кодов а-ля jQuery начитались?

[] instanceof Array
Ответить с цитированием
  #7 (permalink)  
Старый 29.08.2008, 11:18
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 24.07.2008
Сообщений: 1,271

function isObject(o){return typeof o=="object"}
function isArray(o){return isObject(o) && o.constructor.prototype.hasOwnProperty('length')}
Ответить с цитированием
  #8 (permalink)  
Старый 29.08.2008, 11:20
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 24.07.2008
Сообщений: 1,271

вот так получше и если вызвать эту функцию из дочернего фрейма, то сработает... А если вызвать функцию в которой будет [] instanceof Array, то в другом документе (фрейме), свой инстанс - не сработает..
Ответить с цитированием
  #9 (permalink)  
Старый 29.08.2008, 12:01
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от ZoNT
function isArray(o){return isObject(o) && o.constructor.prototype.hasOwnProperty('length')}
var BadArray = function() {};
BadArray.prototype = {length: 0};
isArray(new BadArray()); // ???


Свойство length может быть у любого объекта на вполне законных основаниях.
Ответить с цитированием
  #10 (permalink)  
Старый 29.08.2008, 12:20
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 24.07.2008
Сообщений: 1,271

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск