localStorage 和布尔值 'string'

localStorage and boolean 'string'

在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 方法在这里无关紧要,结果相同。

本地存储存储字符串,恐怕,无论输入是什么(如果你用一个对象喂它,它会用它的标准 toString() 方法自动转换)...所以你在做!! test 在字符串上,它总是 true.

在处理存储在 DOM storage

中的内容时,您应该始终使用 JSON.stringify()JSON.parse()

保存对象时使用JSON.stringify()。如您所知,它将 JavaScript 值转换为 JSON 字符串,因此当使用 JSON.parse() 时,它会正确转换回来。

localStorage['test'] = JSON.stringify(test);

DEMO

发生这种情况是因为本地存储中的任何存储值都是字符串。 所以你已经执行 !!"false" 并且 !! 对于非空字符串总是 true 。 为了能够在 localStorage 中存储非字符串值,您必须始终使用 JSON.

你想做的很简单 localDataStorage,你可以透明地 set/get 以下任何一项 "types":数组,布尔值、日期、浮点数、整数、Null、对象或字符串。

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

示例:

localDataStorage.set( 'test', false );

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

所有转换工作都在后台为您完成:只需 set/get 即可。