HTML5 LocalStorage: 检查密钥是否存在

为什么这不起作用?

if(typeof(localStorage.getItem("username"))=='undefined'){
alert('no');
};

目标是将用户从索引页面重定向到登录页面(如果还没有登录的话)。 这里暂时没有定义 localStorage.getItem("username"))变量。

这是 ios 手机应用程序。

337540 次浏览

MDN 文档展示了 getItem方法是如何实现的:

Object.defineProperty(oStorage, "getItem", {
value: function (sKey) { return sKey ? this[sKey] : null; },
writable: false,
configurable: false,
enumerable: false
});

如果未设置该值,则返回 null。您正在测试它是否是 undefined。检查它是否是 null代替。

if(localStorage.getItem("username") === null){

引自 规格:

GetItem (key)方法必须返回与给定键关联的当前值。如果与该对象关联的列表中不存在给定的键,则此方法必须为 返回空。

你应该检查一下 null

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

这种方法对我很有效:

if ("username" in localStorage) {
alert('yes');
} else {
alert('no');
}

更新:

if (localStorage.hasOwnProperty("username")) {
//
}

另一种方法是,当值不是空字符串、 null 或任何其他虚假值时:

if (localStorage["username"]) {
//
}