26

如果您尝试获取不存在的本地存储项目,是否可以为该项目设置默认值?

例如,假设在您的 Web 应用程序中,各种 UI 首选项保存在本地存储中。当用户离开您的网站然后返回时,UI 会根据从其本地存储中提取的值进行设置。这很好用。

但是,当用户第一次访问您的 Web 应用程序时,这些本地存储值还不存在。因此,当您的 JavaScript 尝试获取这些本地存储项时,它们都将是未定义的。在不存在的情况下,是否没有办法为每个本地存储项指定默认值?

大多数处理保存键/值对的编程语言都提供了某种方式来指定默认值(想想 .ini 配置文件接口)。我期待这样的事情:

var preference = localStorage.getItem('some-key', 'Default Value');

另外,我知道我可以通过测试它们是否为空/未定义并相应地设置值来轻松地以编程方式设置默认值,但我想看看这是否内置在本地存储键/值对获取中,也许我只是没看到。如果这个特性不存在,我最终会写一些基本的本地存储包装函数来添加这个特性。

4

3 回答 3

47

不,没有这样的内置功能。请参阅Storage接口规范:

interface Storage {
  readonly attribute unsigned long length;
  DOMString? key(unsigned long index);
  getter DOMString getItem(DOMString key);
  setter creator void setItem(DOMString key, DOMString value);
  deleter void removeItem(DOMString key);
  void clear();
};

以下行只是为了进一步确认:

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

您可以使用通常的技术。这样的事情应该没问题:

var preference = localStorage.getItem('some-key') || 'Default Value';
于 2012-12-09T20:41:20.993 回答
10

詹姆斯的解决方案:

var preference = localStorage.getItem('some-key') || 'Default Value';

仅当您从不保存空字符串或布尔值或您的变量可以为 0 时才有效。

更长但始终有效的解决方案:

var preference = localStorage.getItem('some-key');
if(null === preference)
{
    preference = 'Default Value';
}
于 2016-08-15T21:06:42.330 回答
1

您可以将此方法用于对象

/*
Helper function that return an object from local storage or a default value
*/
function getObjectFromLocalstorage(key, default_value){
  var value = localStorage.getItem(key);
  if (value === null){
    return default_value;
  }
  return JSON.parse(value);
}

以下是一些示例输出:

console.log(getObjectFromLocalstorage("some_undefined_key", {}));
>>> {}

console.log(getObjectFromLocalstorage("some_undefined_key", []));
>>> []

var value = {a: 1}; 
localStorage.setItem("defined_key", JSON.stringify(value));
getObjectFromLocalstorage("defined_key", {});
>>> {a: 1}
于 2019-02-05T09:19:58.347 回答