如何检查是否设置了 Storage 项?

IT技术 javascript html local-storage
2021-01-13 07:28:08

我如何检查一个项目是否被设置localStorage目前我正在使用

if (!(localStorage.getItem("infiniteScrollEnabled") == true || localStorage.getItem("infiniteScrollEnabled") == false)) {
    // init variable/set default variable for item
    localStorage.setItem("infiniteScrollEnabled", true);
}
6个回答

getItemWebStorage 规范中方法,null如果该项不存在,则显式返回

... 如果给定的键在与对象关联的列表中不存在,则此方法必须返回 null。...

所以你可以:

if (localStorage.getItem("infiniteScrollEnabled") === null) {
  //...
}

看到这个相关的问题:

哦,是的,那里有好点。来自 CSS 背景,我可以自己解决浏览器问题的想法是令人兴奋的,但我可以看到与浏览器的对象乱七八糟可能会令人困惑。
2021-03-22 07:28:08
注释已删除。感谢@TimothyZorn 和 Alnitak
2021-03-29 07:28:08
你能添加你自己的方法localStorage来封装这个小测试吗?例如localStorage.hasItem("infiniteScrollEnabled")
2021-04-08 07:28:08
注释是不正确的 - 当前版本的Storage接口明确指出这些值的类型为DOMStringw3.org/TR/webstorage/#the-storage-interface
2021-04-10 07:28:08
@Paul:是的,您甚至可以扩充Storage.prototype对象,但根据经验,我始终建议不要修改您不拥有的对象,特别是宿主对象。
2021-04-11 07:28:08

您可以使用hasOwnProperty方法来检查这个

> localStorage.setItem('foo', 123)
undefined
> localStorage.hasOwnProperty('foo')
true
> localStorage.hasOwnProperty('bar')
false

适用于当前版本的 Chrome(Mac)、Firefox(Mac) 和 Safari。

@Kaiido 你是对的,我有这种行为是因为我直接解析存储的数据并且JSON.parse("null") === JSON.parse(null)发生了冲突。
2021-03-22 07:28:08
它应该是公认的答案。接受的人会认为未设置存储的“空”值,这是错误的。
2021-03-23 07:28:08
@FlavienVolken 你不能有一个存储null值。您可以拥有"null",但那里的代码不会在其上出现错误行为,而此代码将在length关键上失败
2021-03-24 07:28:08
如果页面加载时未设置 foo 并且您想对 foo 执行某些操作,则这将不起作用。我认为这就是提问者的意思,您想检查密钥是否foo存在,而不是 foo 是否有值。我有这种情况,点击事件.setitem基于基于 getItem 的逻辑触发,但在我 setItem 之前它不会工作,并且在我知道 foo 的状态(value1 或 value2)之前我不能 setItem。换句话说,检查 foo exits 然后将它设置为 value1,如果它没有意外覆盖 value2。
2021-04-02 07:28:08
得到以下 ESLint 错误:“不要从目标 object.eslint(no-prototype-builtins) 访问 Object.prototype 方法‘hasOwnProperty’”
2021-04-04 07:28:08

最短的方法是使用默认值,如果键不在存储中:

var sValue = localStorage['my.token'] || ''; /* for strings */
var iValue = localStorage['my.token'] || 0; /* for integers */
if(!localStorage.hash) localStorage.hash = "thinkdj";

或者

var secret =  localStorage.hash || 42;
JavaScript 返回第一个非空或正值示例:[ null || "abc" ] 将返回 "abc" [ 2 || 5 ] 将返回 2 [ 0 || 5 ] 将返回 5 [ 1 || 5 ] 将返回 1 等。因此上述代码有效。
2021-04-06 07:28:08

如果你想检查未定义,你也可以试试这个:

if (localStorage.user === undefined) {
    localStorage.user = "username";
}

getItem 是一种如果未找到值则返回 null 的方法。