Javascript-форум (https://javascript.ru/forum/)
-   Firefox/Mozilla (https://javascript.ru/forum/css-html-firefox-mizilla/)
-   -   Не работает перечисление полей в Firefox (https://javascript.ru/forum/css-html-firefox-mizilla/18286-ne-rabotaet-perechislenie-polejj-v-firefox.html)

feedborg 24.06.2011 15:29

Не работает перечисление полей в Firefox
 
Я только начинаю изучать JS, сейчас читаю раздел про объекты. Может ли кто-то подсказать, почему этот код работает везде, кроме FF (тестировал на 5 и 6).
<script type="text/javascript">
	for (var propertyName in window) {
		var propertyType;
		propertyType = typeof(window[propertyName]);
		switch (propertyType) {
			case "string":
				console.log("String " + propertyType);
				break;
			case "number":
				console.log("Number " + propertyType);
				break;
			default:
				console.log("Default " + propertyType);
		}
	}
</script>

В консоль вываливается ошибка:
[15:19:28.480] uncaught exception: [Exception... "Operation is not supported" code: "9" nsresult: "0x80530009 (NS_ERROR_DOM_NOT_SUPPORTED_ERR)" location: "file:///D:/JavaScript/index.html Line: 6"]

feedborg 24.06.2011 16:04

В конференции мозилы подсказали, рабочий код будет такой:
<script type="text/javascript">
	for (var propertyName in window) {
		if (propertyName != 'sessionStorage'){
			var propertyType;
			propertyType = typeof(window[propertyName]);
			switch (propertyType) {
				case "string":
					console.log("String " + propertyType);
					break;
				case "number":
					console.log("Number " + propertyType);
					break;
				default:
					console.log("Default " + propertyType);
			}
		}
	}
</script>

Gozar 24.06.2011 16:22

Рабочий код будет такой:
for (var propertyName in window) {
console.log(propertyName);
		if (propertyName != 'sessionStorage' && propertyName != 'mozIndexedDB'){
			var propertyType;
			propertyType = typeof(window[propertyName]);
			switch (propertyType) {
				case "string":
					console.log("String " + propertyType);
					break;
				case "number":
					console.log("Number " + propertyType);
					break;
				default:
					console.log("Default " + propertyType);
			}
		}
	}


Дебаг строка: console.log(propertyName);

Shock 24.06.2011 17:37

На самом деле подсказка не совсем корректная. Что будет, если появится ещё одно свойство, которое выбрасывает exception? Корректное решение будет такого типа:
for (var propertyName in window) {
	try {
		var propertyType = typeof window[propertyName];
	} catch (e) {
		console.log("Unknown " + propertyName);
		continue;
	}
	switch (propertyType) {
		case "string":
			console.log("String " + propertyType);
			break;
		case "number":
			console.log("Number " + propertyType);
			break;
		default:
			console.log("Default " + propertyType);
	}
}

Gozar 25.06.2011 09:25

Shock,
На самом деле у вас кривой скрипт, здесь вообще не нужен switch, Unknown и Default. Вас не учили в школе что нужно быть благодарным за помощь?

feedborg 25.06.2011 19:42

Цитата:

Сообщение от Gozar (Сообщение 110404)
Shock,
На самом деле у вас кривой скрипт, здесь вообще не нужен switch, Unknown и Default. Вас не учили в школе что нужно быть благодарным за помощь?

Вопрос задал я, за помощь благодарен. Насчет "кривизны скрипта" я в посте указал, что только изучаю JS. Я не понимаю, к чему вы придираетесь?

Gozar 25.06.2011 22:20

feedborg,
Извините, спутал вас с Shock, непонравилось замечание по поводу корректности.


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