Кто нибудь помнит, как в JavaScript проверить установленна ли переменная

akxxiv

Новичок
Кто нибудь помнит, как в JavaScript проверить установленна ли переменная

Нужно проверить установленна ли переменная и является ли она массивом. Пытался найти в справочнике, но пока не нашел, может в форуме получится быстрее

-~{}~ 06.04.05 10:16:

Сразу же второй вопрос!
У меня есть три массива, и функция, которая определяет имя массива. Вопрос!
функция определила что массив называется "structur" , ранее был определен
var structur = new Array(.....);
как подтянуть данные из массиа structur имея его строковое название "structur"?
 

crocodile2u

http://vbolshov.org.ru
eval() ?

Хотя вообще-то, это довольно оригинальный способо программировать. :)
 

akxxiv

Новичок
typeof Может определить является ли массивом, но если проверяемая переменная или массив не существует, выскакивает ошибка "... Определение отсутствует"
А есть ли функция похожая на Isset() в РНР?
 

Panchous

Павел
akxxiv
опиши лучше изначальную постановку задачи.
ИМХО то, что ты мутишь - не есть правильно.
 

crocodile2u

http://vbolshov.org.ru
Panchous
Верно говоришь. Надо зрить в корень, а не фигней маяться.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: akxxiv
Нужно проверить установленна ли переменная
можно проверить наличие индекса в массиве (или поля в объекте):
Код:
if ('field' in obj) {
   // поле есть
}
а глобальные переменные --- на самом деле поля объекта window
 

akxxiv

Новичок
PHP:
<script language="JavaScript">
var structura = new Array("company:::/company:::О компании","rabotodatel:::/rabotodatel:::Рабтодателям","soiskatel:::/soiscatel:::Соискателям");
var company = new Array("company_about:::/company/about:::Информация о компании","company_history:::/company/history:::История компании","company_partner:::/company/partner:::Партнеры компании");
var rabotodatel = new Array("rabotodatel_uslugi:::/rabotodatel/uslugi:::Услуги работодателю","rabotodatel_article:::/rabotodatel/article:::Полезные статьи");
var soiskatel = new Array("soiskatel_vacancy:::/soiskatel/vacancy:::Васансии","soiskatel_sovet:::/soiskatel/sovet:::Советы рекрутера");
var company_history = new Array("company_history_2005:::/company/history/2005:::2005 Год", "company_history_2004:::/company/history/2004:::2004 Год", "company_history_2003:::/company/history/2003:::2003 Год", "company_history_2002:::/company/history/2002:::2002 Год");

function MakeTree(razdel)
{
	var file = eval(razdel);
	var array = new Array();
	var echo = document.write;
	
	for(var i=0; i<file.length; i++)
	{	
		echo ("<div>");
		array[i] = file[i].split(":::");
		document.write("<a href="+array[i][1]+">"+array[i][2]+"</a><br>");
		if(eval("self."+array[i][0])){
			//array[i][array.length] = new Array();
			//array[i][array.length] = 
			MakeTree(array[i][0]);
		}
		echo ("</div>");
	}
	
	return array;
	
	
}


MakeTree("structura");
</script>
Собственно он работае, но при условии что MakeTree("structura"); вызывается при загрузке страницы. Если же она вызывается про наступлении события, допустим при кликание на кнопку, выводятся лишь корневые каталоги. Почему?

-~{}~ 06.04.05 14:13:

Да, и еще в JavaScript есть функция схожая с PHP-шным print_r()
 

neko

tеam neko
меня всегда такие вопросы занимали
почему по php народ не любит такие вопросы. но по JS их встречают с распростертыми объятьями
друзья мои, по JavaScript есто документация
как миминум она находится на msdn.microsoft.com
как максимум -- много где еще
фактически ее чуть ли не больше чем документации по php
 

crocodile2u

http://vbolshov.org.ru
Выясняется, что дело не в мануале. А в корявом подходе к решению.

akxxiv
Наверное, я не открою тебе америки, если скажу, что в JS есть массивы.
Хинт: элементом массива может быть другой массив.
 

Tigr

Новичок
Автор оригинала: akxxiv
typeof Может определить является ли массивом, но если проверяемая переменная или массив не существует, выскакивает ошибка "... Определение отсутствует"
typeof(неопределенная переменная) вернет undefined и никакой ошибки не генирируется ибо её нет
 

akxxiv

Новичок
Tigr
Если бы не выдавала бы, я не поднимал бы это тему. К сожалению выдает.

crocodile2u
Не открываешь. Сначала была еще одна функция, которая вызэвала MakeTree("structura") и получала массив, со всеми элементами, которые в свою очередь тоже являлись массивами. Но не получалось его обработать, поэтому я и спросил про print_r(), чтобы понять его структуру. В скрипте закомментированы строки, которые добавляют в конец массива еще один элемент (массив подраздела.)
 

Panchous

Павел
Но не получалось его обработать, поэтому я и спросил про print_r(), чтобы понять его структуру.
akxxiv, а что не ясно в структуре многомерного массива?
В js можно создать массив массивов или объектов.
 

Vasya

Guest
как подтянуть данные из массиа structur имея его строковое название "structur"?
Код:
<script language="JavaScript">
var structur = new Array(10,20,30,40,50);
var x = 'structur';
alert(window[x][2]) // show '30'
</script>
http://dklab.ru/chicken/nablas/38.html
http://dklab.ru/chicken/nablas/39.html
"Оказывается, если переменной присваивается значение в функции без использования var, то она попадает в объект window. Иными словами, x=1 эквивалентно window.x=1, и префикс window. можно опускать."
 
Сверху