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

Jak*_*son 13 html5 local-storage

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

例如,假设在您的Web应用程序中,各种UI首选项都保存在本地存储中.当用户离开您的网站然后返回时,将根据从其本地存储中提取的值来设置UI.这非常有效.

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

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

var preference = localStorage.getItem('some-key', 'Default Value');
Run Code Online (Sandbox Code Playgroud)

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

Jam*_*ice 31

不,没有这样的内置功能.请参阅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();
};
Run Code Online (Sandbox Code Playgroud)

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

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

你可以使用通常的技术.这样的事应该没问题:

var preference = localStorage.getItem('some-key') || 'Default Value';
Run Code Online (Sandbox Code Playgroud)


小智 6

詹姆斯的解决方案:

var preference = localStorage.getItem('some-key') || 'Default Value';
Run Code Online (Sandbox Code Playgroud)

仅当您从未保存空字符串或布尔值或者如果您的变量可以为0时才有效.

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

var preference = localStorage.getItem('some-key');
if(null === preference)
{
    preference = 'Default Value';
}
Run Code Online (Sandbox Code Playgroud)