在你正试图获得一个不存在的本地存储选项的情况下,是有可能设置该项目的默认值?
例如,让我们说,在你的Web应用程序,各种UI首选项保存在本地存储。 当用户离开你的网站,然后回来时,UI根据从本地存储拉到值是设置。 这个伟大的工程。
但是,当用户访问你的web应用程序的第一次,这些本地存储值还不存在。 所以,当你的JavaScript试图让这些本地存储的物品,他们都将是不确定的。 有没有在情况下,每个本地存储项目指定默认值,它不存在的方式吗?
与节能关键对付大多数编程语言/值对提供某种方式来指定默认值(认为的.ini配置文件中的接口)。 我期待这样的事情:
var preference = localStorage.getItem('some-key', 'Default Value');
另外,我知道我可以很容易地通过编程方式,如果他们是空/未定义或不并设置相应值测试设置的默认值,但我想看看这个被内置到本地存储键/值对取和,也许我只是没有看到它。 如果此功能不存在,我会在最后只是写了一些基本的本地存储的包装函数,在此功能的添加。
没有,有没有这样的内置功能。 请参阅该规范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';
从詹姆斯的解决方案:
var preference = localStorage.getItem('some-key') || 'Default Value';
只有工作,如果你不保存空字符串或布尔值或者如果你的变量可以是0。
解决方案哪个更长,但总是工作:
var preference = localStorage.getItem('some-key');
if(null === preference)
{
preference = 'Default Value';
}
你可以使用这个对象的方法
/*
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}