我正在使用 HTML5 的本地存储来保存用户偏好的小型数据库。为此,我具有以下功能:
function save(UserDB) {
if (window.localStorage) { // Only do this if the browser supports it
localStorage.setObject('UserDataBase', JSON.stringify(UserDB));
}
和
Storage.prototype.setObject = function(key, value) {
this.setItem(key, JSON.stringify(value));
}
UserDB 是一个与此类似的对象数组:
[{"uid":"ABC","groupname":"我的组","calendarid":"sdf44d7g3ak5q8ifdrl308hk0@group.calendar.google.com","link":null,"userenable":true,"color" :"528800"},{"uid":"CdO","groupname":"CKHO","calendarid":"apkrty45sdfer44fd1mr55dfghfg8@group.calendar.google.com","link":null,"userenable":true "颜色":"AB8B00"}]
这似乎工作得很好。
然后,当用户再次加载站点时,我希望能够根据存储在前一个会话中的信息在变量中重新生成对象数组:
Storage.prototype.getObject = function(key) {
var value = JSON.parse(this.getItem(key));
return JSON.parse(value);
}
这似乎也有效。问题是当我使用最后一个函数来实际存储数组时:
function ApplyUserConfiguration(Data) {
if (window.localStorage) {
var UserDBx = localStorage.getObject('UserDataBase');
console.log("User Configuraiton found");
console.log(UserDBx);
console.log("ActualGetObject");
console.log(localStorage.getObject('UserDataBase'));
console.log(UserDBx.length);
for (var i = 0; i < Data.length; i++){
for (var j=0; j< 5; j++){
if(Data[i].uid == UserDBx[j].uid){
Data[i].userenable = UserDBx[j].userenable;
Data[i].Color = UserDBx[j].color;
delete UserDBx[j];
break;
}
}
}
}
return Data;
};
原来,console.log(localStorage.getObject('UserDataBase')); 正确返回对象数组,但 console.log(UserDBx); 返回第一个元素为“未定义”的对象数组。知道为什么会这样吗?