Не работает перечисление полей в 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, время: 05:42. |