Всем привет.
Что-то не могу разобраться в том, как работает перебор объекта. Вот код:
if (typeof localStorage === 'object') {
Storage.prototype.getFullSize = function() {
var tempLen = 0;
for(var x in localStorage) {
tempLen = parseFloat(tempLen) + parseFloat((localStorage[x].length * 2)/1024/1024);
}
return tempLen;
}
}
Ругается на localStorage[x].length, код ошибки: Unable to get property 'length' of undefined or null reference . Эмулировать подобную ошибку не получается, она проявляется в некоторых браузерах, вот один из них: Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; Touch; MATBJS; rv:11.0) like Gecko (IE 11).
Я встречал написание кода из документации с использованием hasOwnProperty:
for (var prop in obj) {
if(!obj.hasOwnProperty(prop)) continue;
alert(prop + " = " + obj[prop]);
}
Гуглить пробовал, но не могу найти объяснения, зачем это надо и поможет ли это в данном случае. Почему элемент объекта может быть равен undefined или null ? localStorage.setItem('a',null); пробовал, ошибку в моих браузерах не кидает, включая IE 11.
Подскажите почему происходит в редких браузерах подобная ошибка и как с ней бороться? И второй вопрос, для чего в таких случаях пишется hasOwnProperty, неужели доступа может не быть?