【问题标题】:how to remove localstorage if you assign object instead of key?如果分配对象而不是键,如何删除本地存储?
【发布时间】:2014-03-23 17:47:52
【问题描述】:

我有这段代码为 localStorage 分配对象。标签/窗口关闭后如何删除?

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

我尝试过使用

delete window.localStorage['data']window.localStorage.removeItem(data)localStorage.removeItem(data)

但不工作。当我关闭浏览器并再次访问它时,它会直接引导我进入登录页面。关于如何做的任何帮助?提前非常感谢

【问题讨论】:

  • localStore.removeItem("data")
  • 只能替换本地存储中的内容;不要删除它
  • @aliasm2k:当然可以删除。
  • 您尝试的解决方案将起作用,尽管正如@tymeJV 指出的那样,您在使用.removeItem() 时忘记了data 周围的引号。如果您遇到问题,问题中不会显示。
  • "...如果你分配对象而不是键" 真的没有意义。

标签: javascript html


【解决方案1】:

如果你想要这种行为,我认为你应该使用 sessionStorage,但在这种特殊情况下,我会使用:

window.onbeforeunload = function() { delete localStorage['data']; };

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

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

【讨论】:

  • 感谢您的回答。我没有使用 sessionStorage,因为我不想让 IOS 浏览器复杂化。我会试试你的答案,让你知道。非常感谢您注意到这一点。真的是我的错,我没有注意到。再次感谢
  • 欢迎你,祝你的项目好运,其他用户也给了很好的提示,特别是 user2864740 =)
  • 谢谢。我尝试使用window.onbeforeunload = function() { delete localStorage['data']; }; 发生的情况是,当您访问该文件夹时,您将看到登录页面,然后当您刷新时,它只会将您重定向到登录页面。你能帮我找出我在这里做错了什么吗?谢谢
  • 不确定我是否理解,您要实现的行为是什么?,我给您的代码只会在您关闭选项卡/窗口或刷新,甚至转到时从 localStorage 中删除该值另一个网站,在这些情况下,您将删除该值。如果它不这样做,您可能会在某个时候再次设置该值,让我知道您要达到的目标是什么,如果它与原始问题太不同,我想您应该打开另一个问题并标记其中一个答案是正确的。
【解决方案2】:

如果您想删除保存在 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();

然后你将清除localStorage中的所有数据。

您可以对 sessionStorage 做同样的事情。使用相同的方法。

【讨论】:

  • 这里有个问题,如果你已经分配了localStorage["clear"],那么在调用localStorage.clear()之前先调用localStorage.removeItem("clear")
  • 感谢大家的回答。 amitab 所以如果我有localSotrage['data'] 那么我需要有localStorage.removwItem("data") 然后localStorage.clear()?我会试试,让你知道
【解决方案3】:

只需将值设置为nullundefined

localSotrage['data'] = null;

你也可以使用:

delete localStorage.data   //or 
localStorage.removeItem("data")

【讨论】:

  • 您好,感谢您的帮助。我都试过了。但是发生的情况是,当您访问该文件夹时,您将看到登录页面,然后当您刷新时,它只会将您重定向到登录页面。你能帮我找出为什么会这样吗?谢谢
  • 如果反对者可以发表评论并让我知道答案有什么问题,我将不胜感激!
【解决方案4】:

处理本地存储的正确方法是使用Storage API,其中包括setItemgetItemremoveItem方法 - 这样做而不是 的直接属性访问。使用 API 将在浏览器(如果支持)在本地存储 shims 上可靠地工作。

(以下显示API的工作原理;如果有错误,请注意确切它所说的内容。)

localStorage.clear();                // reset for examples

localStorage.setItem("data", "hi!")
localStorage.length                  // -> 1
localStorage.getItem("data")         // -> "hi!"

localStorage.setItem("data", null)   // set value to null
localStorage.length                  // -> 1 (key NOT removed!)
localStorage.getItem("data")         // -> null

localStorage.removeItem("data")      // remove key
localStorage.length                  // -> 0 (key really WAS removed!)
localStorage.getItem("data")         // -> null

使用上述 API 的另一个原因是 localStorage.setItem("getItem", "foo") 不会破坏 localStorage.getItem 的下一次使用,因为存储键/值对和存储 object 属性保持明显不同。 p>


在 Chrome 中(可能还有其他地方),delete 运算符,从普通 JavaScript 对象中删除属性“有效”。出于各种原因,我推荐或使用这种速记。

  1. W3C API 根本没有没有讨论/定义它
  2. 混淆了JS属性和底层模型;考虑localStorage['getItem'] 和变体,如上所述
  3. 它不能也不能在垫片上工作

例如,无论如何:

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)

Deleting from localStorage: should I use delete or .removeItem?

【讨论】:

  • 非常感谢您向我解释。我尝试给它一个对象,因为我希望它检查用户是否已登录,如果没有则重定向到登录页面。我会尝试你的答案,让你知道发生了什么。非常感谢
  • 嗨,如果我想检查密钥是否是从登录页面设置的。我在登录名上有这个localStorage['data1b']=JSON.stringify({logedIn:0}),在索引上有这个localStorage['data'] = JSON.stringify({folder1: {logedIn: 1}, folder2: {logedIn: 0}, folder3: {logedIn: 1}});。我如何使用您的答案做出这样的事情?谢谢进一步的帮助。
猜你喜欢
  • 1970-01-01
  • 2018-11-07
  • 2016-11-25
  • 2019-10-29
  • 2019-05-16
  • 2016-07-03
  • 1970-01-01
  • 1970-01-01
  • 2013-11-25
相关资源
最近更新 更多