4

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

使用setItemandgetItem方法而不是:

设置项目:localStorage.myKey = "myValue";
获取项目:localStorgae.myKey --> 返回“myValue”

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

只是好奇谢谢。

4

2 回答 2

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

于 2013-09-05T13:45:12.673 回答
1

set/getItem比属性访问更好,原因如下:

  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
    
于 2013-09-05T14:15:56.750 回答