Javascript 如果分配对象而不是键,如何删除本地存储?

Javascript 如果分配对象而不是键,如何删除本地存储?,javascript,html,Javascript,Html,我有一段代码为localStorage分配对象。如何在选项卡/窗口关闭后删除它 localSotrage['data']=JSON.stringify({folder1:{logedIn:1},folder2:{logedIn:0},folder3:{logedIn:1}) 我试着用 删除window.localStorage['data']和 window.localStorage.removietem(数据)和 localStorage.removietem(数据) 但不起作用。当我关闭浏览

我有一段代码为localStorage分配对象。如何在选项卡/窗口关闭后删除它

localSotrage['data']=JSON.stringify({folder1:{logedIn:1},folder2:{logedIn:0},folder3:{logedIn:1})

我试着用

删除window.localStorage['data']
window.localStorage.removietem(数据)
localStorage.removietem(数据)


但不起作用。当我关闭浏览器并再次访问它时,它将引导我直接进入登录页。关于如何做有什么帮助吗?事先非常感谢

只需将值设置为
null
undefined

localSotrage['data'] = null;
您还可以使用:

delete localStorage.data   //or 
localStorage.removeItem("data")
处理本地存储的正确方法是使用,其中包括
setItem
getItem
removietem
方法-这样做而不是直接访问属性。使用API可以跨浏览器(在支持浏览器的地方)和本地存储系统可靠地工作

(下面显示了API的工作原理;如果有错误,请注意它的确切含义。)

使用上述API的另一个原因是
localStorage.setItem(“getItem”,“foo”)
不会中断
localStorage.getItem
的下一次使用,因为存储键/值对和存储对象属性保持明显的区别


在Chrome(或者其他地方)中,从普通JavaScript对象中删除属性的操作符“起作用”。出于各种原因,我不推荐或使用这种速记

  • W3CAPI根本没有讨论/定义它
  • 它混淆了JS属性和底层模型;考虑<代码> LoalStury[GigTime] < /C>和变体,如上面讨论的
  • 它不能也不会在垫片上工作
  • 例如,在任何情况下:

    localStorage["data"] = "hi!"
    localStorage.getItem("data")        // -> "hi!"
    localStorage["data"]                // -> "hi!"
    localStorage.hasOwnProperty["data"] // -> true (exposed property in Chrome)
    
    delete localStorage["data"]
    localStorage.getItem("data")        // -> null
    localStorage["data"]                // -> undefined
    localStorage.hasOwnProperty["data"] // -> false (property is gone)
    

    请参见

    如果要删除保存在localStorage中的特定项目,请执行以下操作:

    localStorage.setItem("key", "value"); // Set a value with a "key"
    localStorage.getItem("key"); // Get the value associated with "key"
    localStorage.removeItem("key"); // Remove value associated with "key"
    
    您还可以清除所有本地存储。这是通过以下方式完成的:

    localStorage.clear();
    
    然后,您将清除LocalStorRange中的所有数据


    您可以使用sessionStorage执行同样的操作。使用相同的方法。

    如果您想要这种行为,我认为您应该使用会话存储,但在这种特殊情况下,我将使用:

    window.onbeforeunload=函数(){
    删除本地存储['data'];
    };

    要删除该值及其键,将其设置为null将保留该键


    顺便说一下,您在代码中拼错了localStorage,只是让您知道=)

    localStore.removietem(“数据”)
    您只能替换本地存储中的内容;不删除it@aliasm2k:当然可以删除它。您尝试的解决方案会起作用,尽管@tymeJV指出,您在使用
    .removietem()
    时忘记了
    数据
    周围的引号。如果您有问题,问题中没有说明。而且“…如果您分配的是对象而不是键”没有真正意义。这里有一个问题是,如果您分配了
    localStorage[“clear”]
    ,那么在调用
    localStorage.clear()之前只需调用
    localStorage.removietem(“clear”)
    感谢各位的回答。amitab所以如果我有
    localSotrage['data']
    ,那么我需要
    localStorage.removwItem(“数据”)
    然后
    localStorage.clear()
    ?我试试看,让你知道。非常感谢你给我解释。我尝试给它一个对象,因为我想让它检查用户是否已登录,如果未登录,则重定向到loign页面。我会试试你的答案,让你知道发生了什么。谢谢,如果我想检查这个密钥是否是从登录页面设置的呢。我在登录时有这个
    localStorage['data1b']=JSON.stringify({logedIn:0})
    ,这个
    localStorage['data']=JSON.stringify({folder1:{logedIn:1},folder2:{logedIn:0},folder3:{logedIn:1})在索引上。我怎么用你的答案做出这样的事情?谢谢你的回答。我没有使用会话存储,因为我不想使IOS浏览器复杂化。我会试试你的答案,然后告诉你。非常感谢你注意到这一点。真糟糕,我没注意到。再次感谢您的欢迎,祝您项目顺利,其他用户也给出了很好的提示,特别是用户2864740=)谢谢。我尝试使用
    window.onbeforeunload=function(){delete localStorage['data'];}发生的情况是,当您访问文件夹时,您将看到登录页,然后当您刷新时,这是它将您重定向到登录页的唯一时间。你能帮我找出我做错了什么吗?感谢如果我不确定是否理解,您试图实现的行为是什么?我给您的代码仅在您关闭选项卡/窗口或刷新,甚至转到其他网站后,才会从localStorage中删除该值,在这些情况下,您将删除该值。如果它没有这样做,您可能会在某个时候再次设置该值,让我知道您想要实现的目标是什么,如果它与原始问题太不一致,我想您应该打开另一个问题,并将其中一个答案标记为正确答案。嗨,谢谢您的帮助。我两个都试过了。但是,当你访问文件夹时,你会看到登录页,当你刷新时,这是唯一一次它会将你重定向到登录页。你能帮我找出为什么会这样吗?谢谢,如果投票人能发表评论并让我知道答案有什么问题,我将不胜感激!
    
    localStorage.clear();