6

我只是在为 HTML5 中的本地存储做一些测试。注意我使用的是 Safari 6.0.2,因为似乎许多 Web 引擎处理它们的方法不同。

如果我这样做:

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

alert(varType);

你现在会想;这是一个数字!但不,它不是.. 似乎,即使使用类型转换,HTML5 本地存储在插入它们时也会将所有变量类型转换为字符串。这很有趣,因为当使用开发工具时,它会在引号之间显示字符串值,而不是数字。也许是检查器窗格去掉了引号。

我已经在 jQuery 中有一个旧的自动 typeCasting 函数,但我总是厌倦这些情况,因为 0 和 false 仍然可以把事情搞砸。

任何人都知道 localStorage.* 库是否有维护变量类型的设置?

4

4 回答 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) );
    }
};

这是小提琴:http: //jsfiddle.net/hD9dF/1/

于 2012-11-18T17:52:54.257 回答
4

本地存储将所有内容都转换为字符串(因为它将所有内容保存为文本)。为了让您的生活更轻松,并至少保留数字/布尔/对象结构,JSON.stringify以及JSON.parse进出的所有内容。

为了提高该建议的性能,每个“概念”仅使用一个 localStorage 变量(如地图小部件的所有数据,或所有用户首选项等),并构建一个 JS 对象,然后将其转换为 JSON 字符串,以保存到那个变量(必要时)。

于 2012-11-18T17:57:43.940 回答
0

您想要做的事情很简单localDataStorage,您可以在其中透明地设置/获取以下任何“类型”:Array、Boolean、Date、Float、Integer、Null、Object 或 String。

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

例子:

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

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

于 2017-11-08T19:57:01.970 回答
0

例子:

let id = JSON.parse(<any>localStorage.getItem("id"))
    
if (typeof id != "number") {
// rest of code
于 2021-05-10T10:01:03.480 回答