在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);
我很困惑为什么会这样做。任何解释?
PS:使用getter / setter localStorage方法并不重要,结果相同。
答案 0 :(得分:11)
本地存储存储字符串,我担心,无论输入是什么(如果用对象提供它,它将使用其标准toString()
方法自动转换)...所以你正在做{{ 1}}在一个字符串上,始终为!! test
。
在处理DOM storage
中存储的内容时,您应始终使用true
和JSON.stringify()
答案 1 :(得分:4)
使用 Embedded Resource
。如您所知,它会将JavaScript值转换为JSON字符串,因此在使用JSON.stringify()
时,它会正确转换回来。
JSON.parse()
答案 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。