HTML5本地存储和变量类型

6

我刚刚在做一些有关HTML5中本地存储的测试。需要注意的是,我使用的是Safari 6.0.2,因为许多浏览器引擎处理它们的方法不同。

如果我这样做:

localStorage.setItem('subTotal', Number(12345)); // I know, it's redundant :)
var varType = typeof localStorage.getItem('subTotal');

alert(varType);

你现在可能会认为:这是一个数字!但不是的。似乎即使进行类型转换,HTML5本地存储也会将所有变量类型转换为字符串进行插入。有趣的是,使用开发工具时,它会在引号之间显示字符串值,但不会显示数字。也许是检查器面板去掉了引号。
我已经在jQuery中编写了一个旧的自动类型转换函数,但我总是对这些情况持谨慎态度,因为0和false仍然可能造成混乱。
有人知道localStorage.*库是否有设置来维护变量类型吗?
4个回答

14

您应该先将它们转换为 JSON 格式:

localStorage.setItem( 'subTotal', JSON.stringify(12345) );

然后,当检索您的项目时,请解析JSON:

JSON.parse( localStorage.getItem('subTotal') );

这是该示例: http://jsfiddle.net/hD9dF/
为了更方便使用,可以创建自己的包装器:
var myLocalStorage = {
    set: function (item, value) {
        localStorage.setItem( item, JSON.stringify(value) );
    },
    get: function (item) {
        return JSON.parse( localStorage.getItem(item) );
    }
};

以下是fiddle链接:http://jsfiddle.net/hD9dF/1/


4
本地存储将所有内容都转换为字符串(因为它将所有内容保存为文本)。 为了让您的生活更轻松,并至少保留数字/布尔值/对象结构,请对进出的所有内容进行JSON.stringifyJSON.parse处理。
为了提高此建议的性能,只使用一个localStorage变量来表示一个“概念”(例如所有地图部件的数据或所有用户首选项等),并构建一个JS对象,然后将其转换为JSON字符串以保存到该变量中(必要时)。

0

使用localDataStorage,您可以轻松地设置/获取以下“类型”中的任何一个:数组、布尔值、日期、浮点数、整数、空值、对象或字符串。

[免责声明]我是该实用程序的作者[/免责声明]

示例:

localDataStorage.set( 'key1', 'Belgian' );
localDataStorage.set( 'key2', 1200.0047 );
localDataStorage.set( 'key3', true );
localDataStorage.set( 'key4', { 'RSK' : [1,'3',5,'7',9] } );
localDataStorage.set( 'key5', null );

localDataStorage.get( 'key1' );   -->   'Belgian'
localDataStorage.get( 'key2' );   -->   1200.0047
localDataStorage.get( 'key3' );   -->   true
localDataStorage.get( 'key4' );   -->   Object {RSK: Array(5)}
localDataStorage.get( 'key5' );   -->   null

所有的转换工作都在后台为您完成:只需设置和获取即可。


0

例子:

let id = JSON.parse(<any>localStorage.getItem("id"))
    
if (typeof id != "number") {
// rest of code

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接