为 HTML5 本地存储项目指定默认值?

新手上路,请多包涵

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

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

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

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

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

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

原文由 Jake Wilson 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 312
2 个回答

不,没有这样的内置功能。请参阅 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';

原文由 James Allardice 发布,翻译遵循 CC BY-SA 3.0 许可协议

詹姆斯的解决方案:

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

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

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

 var preference = localStorage.getItem('some-key');
if(null === preference)
{
    preference = 'Default Value';
}

原文由 Mathieu 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题