2017-03-03 128 views
0

我似乎无法让我的localStorage来清除我似乎无法清除我的localStorage

我有两个单独的JS文件,一个被称为StorageBin,另一个就被称为JAS2。

这是我在StorageBin

function MyStorage() { }; 
MyStorage.Keys = { 
    MyNewObject:"" 
}; 

MyStorage.Keys = function (value) { 
    localStorage.setItem(this.Keys.MyNewObject, JSON.stringify(value)) 
    return value; 
}; 
在JAS2文件

代码

$(document).ready(function() { 

    var myObject = { 
     Name: "John", 
     LastName: "Doe" 
    } 

    MyStorage.Keys.MyNewObject = myObject; 

    var hereItIs = MyStorage.Keys.MyNewObject; 

    console.log(hereItIs.LastName + ", " + hereItIs.Name); 


    $('#btn').click(function() { 

     //localStorage.removeItem("MyNewObject"); 
     //localStorage.removeItem("MyStorage.Keys.MyNewObject"); 
     //window.localStorage.clear(); 
     //window.localStorage.removeItem("MyNewObject"); 

    }); 

    $('#btn2').click(function() { 
     var hereItIs = MyStorage.Keys.MyNewObject; 

     console.log(hereItIs.LastName + ", " + hereItIs.Name); 
    }); 


}); 

您看到BTN点击事件注释掉一切的一切我都试过了。没有工作,我知道这是因为我的btn2点击事件。

我哪里错了?

+0

您在哪里存储本地存储中的任何内容以开始? – Xufox

+0

@Xufox,我在localStorage.setItem中显示的第一个代码块.. – Chris

+0

但是,您不是在任何地方调用该函数。 – Xufox

回答

0

简短的回答

你设置与对象的条目作为重点,而不是。由此产生的密钥名称将为"[object Object]",因此您无法通过"MyNewObject""MyStorage.Keys.MyNewObject"访问或删除它。


我注意到的第一个问题:MyStorage.Keys不能同时是一个对象和一个函数。所以这段代码没什么意义:

MyStorage.Keys = { // This object will be lost shortly. 
    MyNewObject: "" 
}; 

MyStorage.Keys = function(value){ 
    localStorage.setItem(this.Keys.MyNewObject, JSON.stringify(value)) 
    return value; 
}; 

第一个赋值可以被删除。

当然,一个新的MyNewObject属性将这一行后存在:

MyStorage.Keys.MyNewObject = myObject; 

在省电功能(MyStorage.Keys),你设置一个LocalStorage项与键this.Keys.MyNewObject。它是指myObject,这是一个对象。这也是没有意义的,因为setItem预计字符串作为第一个参数,而不是一个对象。因此参数将被转换为字符串并导致[object Object]


它的出现,但是,你要访问您的LocalStorage项与任何"MyNewObject""MyStorage.Keys.MyNewObject"。所以只是代替这些线路之一进行设置:

localStorage.setItem("MyNewObject", JSON.stringify(value)); 
localStorage.setItem("MyStorage.Keys.MyNewObject", JSON.stringify(value)); 

然后你的两个第一次尝试或最后一个生效。

如果你想关键是{Name:"John",LastName:"Doe"},使用

localStorage.setItem(JSON.stringify(this.Keys.MyNewObject), JSON.stringify(value)); 

如果你想关键是Doe, John,使用

localStorage.setItem(hereItIs.LastName + ", " + hereItIs.Name, JSON.stringify(value)); 

在任何情况下,如果要删除这些条目,您需要以同样的方式生成密钥。

localStorage.clear();也应该清除本地存储的所有内容。我无法重现它无法正常工作。


调试

您可以通过使用browser console (dev tools)(命中F12)和去Storage标签调试本地存储(您可能需要启用它在开发工具设置)。在那里你会看到哪些键和值被保存。

localStorage.setItem("MyNewObject", JSON.stringify(value)); 


进一步的例子

Storage on MDN

设定的入口获取该条目

localStorage.getItem("MyNewObject"); 

删除该条目

localStorage.removeItem("MyNewObject"); 
+0

经过您的回答并进行比较后,我意识到我的代码没有放置任何东西。感谢您的回答,我现在已经修复了所有的代码,现在正在进入存储。感谢您解释为什么我的代码错误。现在我正在做MyStorage.Keys(key,value)并将其放入存储并创建一个名为MyStorage.Get(key)的新函数并从存储中获取密钥。哦,我很高兴你向我展示了如何检查开发人员工具中localStorage中的内容 – Chris