Не работает перечисление полей в 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"] |
В конференции мозилы подсказали, рабочий код будет такой:
<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>
|
Рабочий код будет такой:
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); |
На самом деле подсказка не совсем корректная. Что будет, если появится ещё одно свойство, которое выбрасывает 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);
}
}
|
Shock,
На самом деле у вас кривой скрипт, здесь вообще не нужен switch, Unknown и Default. Вас не учили в школе что нужно быть благодарным за помощь? |
Цитата:
|
feedborg,
Извините, спутал вас с Shock, непонравилось замечание по поводу корректности. |
| Часовой пояс GMT +3, время: 06:08. |