HTML5 localstorage方法的优势是什么?

时间:2013-09-05 13:39:41

标签: javascript html5 local-storage

我一直在使用localStorage,我遇到了一个问题:

使用setItemgetItem方法而不是:

的优势是什么?
SET ITEM : localStorage.myKey = "myValue";
GET ITEM : localStorgae.myKey   -->  returns "myValue"

那么它们只是辅助方法吗?好的做法?

好奇心谢谢。

2 个答案:

答案 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

参考:http://diveintohtml5.info/storage.html

答案 1 :(得分:1)

set / getItem优于property-access,原因如下:

  1. 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无法对所有存储属性值实现等效效果。

  2. 您无法设置存储密钥length,并且无法使用功能访问权限访问密钥getItemsetItemremoveItem

    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