Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   как разпринтить все существующие переменные (https://javascript.ru/forum/misc/1168-kak-razprintit-vse-sushhestvuyushhie-peremennye.html)

scuter 20.04.2008 04:16

как разпринтить все существующие переменные
 
пробовал сделать так
function init()
    {
	    for (var k in this)
		{
			alow += '<li>'+k+"=>"+(typeof this[k])+"</li>\n";
		}
		document.write('<ul>'+alow+'</ul>');
    }

к сожалению ничего не вышло пишет предполагаемое наличие объекта
пробовал разпринтить переменную document вот так
function init()
    {
	    for (var k in document)
		{
			alow += '<li>'+k+"=>"+(typeof document[k])+"</li>\n";
		}
		document.write('<ul>'+alow+'</ul>');
    }

в итоге ничего не получилось пишет тоже самое
скажите пожалуйста как это сделпть

tenshi 20.04.2008 10:40

никак

scuter 21.04.2008 00:34

tenshi,
кажется у тебя на все вопросы ответ никак.

Dmitry A. Soshnikov 21.04.2008 01:51

scuter, ну все-не все, а вывести содержимое хэша можно. Идея у тебя правильная - пройтись for'ом ... in ... по объекту, выводя ключ и значение по ключу (obj[ключ]) (ну ты вместо значения выводишь тип - не понятно зачем, ну надо, - значит надо ;)).

P.S.: кстати, оба твоих примера рабочие (первый для window, т.к. this в этом случае ссылается на него, во втором - явно - document) - ты просто забыл объявить переменную alow до использования (alow += ...). Просто поставь var allow = ''; в самом начале функции.

P.S.[2]: Для дебага можно переписать метод toString в прототипах Object'a и Array'я (как пример - здесь - там в самом низу, листинг 20).

tenshi 21.04.2008 03:28

scuter, видимо потому, что ты вечно хочешь невозможного :-)

scuter 21.04.2008 19:12

ds [.code],
большое спасибо, я как то не доглядел это дело с alow
сейчас попробовал просмотреть "2 уровень в обьектах"
но это дело почемуто не выходит,
код вот такой
var alow = '';
document.write('<ul>');
for (var k in this)
{
    if(typeof this[k] == 'object')
    {
    	var termo = '';
    	var ject = eval('this.'+k);
    	document.write('<li>'+k+"=>"+(typeof this[k])+"(<ul>");
    	for (var d in ject)
    	{
    		document.write('<li>'+d+"=>"+(typeof this[k][d])+"</li>\n");
    	}
    	document.write("</ul>)</li>\n");
    }
    else if(typeof this[k] == 'string')
    {
    	document.write('<li>'+k+"=>"+(typeof this[k])+"("+eval('this.'+k)+")</li>\n");
    }
	else
	{
		document.write('<li>'+k+"=>"+(typeof this[k])+"</li>\n");
	}
}
document.write('</ul>');

в IE тормозится где то в external
а в FF гдето в document-те
интересно почему???
tenshi,
как видишь нет ничего невозможного.

Kolyaj 21.04.2008 22:07

Просто для справки: вместо
eval('this.'+k)
можно писать
this[k]

tenshi 21.04.2008 22:18

Цитата:

как видишь нет ничего невозможного.
не вижу

Dmitry A. Soshnikov 22.04.2008 01:27

scuter,

> интересно почему???

слишком глубокие хэши, к тому же некоторые являются рекурентными (в некоторых свойства имеют ссылку на самих себя) - при обычной рекурсивной организации может быть вообще зацикливание

tenshi 22.04.2008 10:05

Цитата:

рекурентными (в некоторых свойства имеют ссылку на самих себя)
рекурсивным


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