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

问题描述 投票:12回答:3

在你正试图获得一个不存在的本地存储选项的情况下,是有可能设置该项目的默认值?

例如,让我们说,在你的Web应用程序,各种UI首选项保存在本地存储。当用户离开你的网站,然后回来时,UI根据从本地存储拉到值是设置。这个伟大的工程。

但是,当用户访问你的web应用程序的第一次,这些本地存储值还不存在。所以,当你的JavaScript试图让这些本地存储的物品,他们都将是不确定的。有没有在情况下,每个本地存储项目指定默认值,它不存在的方式吗?

与节能关键对付大多数编程语言/值对提供某种方式来指定默认值(认为的.ini配置文件中的接口)。我期待这样的事情:

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

另外,我知道我可以很容易地通过编程方式,如果他们是空/未定义或不并设置相应值测试设置的默认值,但我想看看这个被内置到本地存储键/值对取和,也许我只是没有看到它。如果此功能不存在,我会在最后只是写了一些基本的本地存储的包装函数,在此功能的添加。

html5 local-storage
3个回答
29
投票

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

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';

6
投票

从詹姆斯的解决方案:

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

只有工作,如果你不保存空字符串或布尔值或者如果你的变量可以是0。

解决方案哪个更长,但总是工作:

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

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}
© www.soinside.com 2019 - 2024. All rights reserved.