我一直在使用localStorage,我遇到了一个问题:
使用setItem
和getItem
方法而不是:
SET ITEM : localStorage.myKey = "myValue"; GET ITEM : localStorgae.myKey --> returns "myValue"
那么它们只是辅助方法吗?好的做法?
好奇心谢谢。
答案 0 :(得分:5)
HTML5存储基于命名的键/值对。您可以根据命名密钥存储数据,然后使用相同的密钥检索该数据。命名键是一个字符串。数据可以是JavaScript支持的任何类型,包括字符串,布尔值,整数或浮点数。但是,数据实际上存储为字符串。如果要存储和检索字符串以外的任何内容,则需要使用parseInt()或parseFloat()等函数将检索到的数据强制转换为预期的JavaScript数据类型。
interface Storage {
getter any getItem(in DOMString key);
setter creator void setItem(in DOMString key, in any data);
};
使用已存在的命名键调用setItem()将以静默方式覆盖以前的值。使用不存在的键调用getItem()将返回null而不是抛出异常。
与其他JavaScript对象一样,您可以将localStorage对象视为关联数组。您可以简单地使用方括号,而不是使用getItem()和setItem()方法。例如,这段代码:
var foo = localStorage.getItem("bar");
// ...
localStorage.setItem("bar", foo);
...可以改写为使用方括号语法:
var foo = localStorage["bar"];
// ...
localStorage["bar"] = foo;
也许这个希望。 :d
答案 1 :(得分:1)
set
/ getItem
优于property-access,原因如下:
localStorage
将所有输入强制转换为字符串,但您可以覆盖set
/ getItem
方法来执行序列化和反序列化以支持字符串以外的类型:
var basicSetItem = localStorage.setItem;
localStorage.setItem = function(key, val) {
basicSetItem.call(localStorage, key, JSON.stringify(val));
}
var basicGetItem = localStorage.getItem;
localStorage.getItem = function(key) {
return JSON.parse(basicGetItem.call(localStorage, key));
}
使用ECMAScript 5 API无法对所有存储属性值实现等效效果。
您无法设置存储密钥length
,并且无法使用功能访问权限访问密钥getItem
,setItem
或removeItem
:
localStoage.length = "foo"; // does not work
localStoage.setItem("length", "foo"); // works
var bar = localStoage.setItem; // gets the `setItem` function
var bar = localStorage.getItem("setItem"); // gets the value stored in the `setItem` key