localStorage和boolean' string'

时间:2015-06-04 12:46:33

标签: javascript html5 boolean local-storage

在localStorage中存储布尔值,此值将转换为字符串。 现在尝试将此值从localStorage转换回布尔值,我需要使用JSON.parse()方法,更方便的!!不起作用。

代码示例:

var test = false;
localStorage['test'] = test;
console.log("JSON.parse returns: ", JSON.parse(localStorage['test']), "expected: ", test);
console.log("'!!' returns: ", !! localStorage['test'], "expected: ", test);

-jsFiddle-

我很困惑为什么会这样做。任何解释?

PS:使用getter / setter localStorage方法并不重要,结果相同。

4 个答案:

答案 0 :(得分:11)

本地存储存储字符串,我担心,无论输入是什么(如果用对象提供它,它将使用其标准toString()方法自动转换)...所以你正在做{{ 1}}在一个字符串上,始终为!! test

在处理DOM storage

中存储的内容时,您应始终使用trueJSON.stringify()

答案 1 :(得分:4)

保存对象时

使用 Embedded Resource。如您所知,它会将JavaScript值转换为JSON字符串,因此在使用JSON.stringify()时,它会正确转换回来。

JSON.parse()

DEMO

答案 2 :(得分:3)

这是因为localstorage中的任何存储值都是字符串。 因此,对于非空字符串,您需要localStorage['test'] = JSON.stringify(test); !!"false"始终为!!。 为了能够在localStorage中存储非字符串值,您必须始终使用JSON。

答案 3 :(得分:0)

您想要做的事情很简单localDataStorage,您可以透明地设置/获取以下任何"类型":数组,布尔,日期,浮点数,整数,空,对象或字符串。

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

示例:

localDataStorage.set( 'test', false );

localDataStorage.get( 'test' );   -->   false

所有转换工作都在后台为您完成:只需设置/ get and go。