我注意到我无法设置布尔值localStorage?
localStorage.setItem("item1", true);
alert(localStorage.getItem("item1") + " | " + (localStorage.getItem("item1") == true));
总是true | false在我尝试测试警报时localStorage.getItem("item1") == "true"发出警报...所以我无法将项目设置localStorage为true?
即使它是一个字符串,我认为只会===检查类型?
所以
alert("true" == true); // should be true? 
CMS*_*CMS 80
目前,所有的实现Safari浏览器,WebKit的,Chorme,火狐和IE跟随一个旧版本的WebStorage标准,在存储物品的价值只能是一个字符串.
一种选择是使用JSON parse和stringify方法序列化和反序列化的数据,我建议前段时间在另外一个问题,例如:
var value = "true";
JSON.parse(value) === true; // true
ken*_*ytm 59
Firefox的Storage实现只能存储字符串,但在2009年9月,W3C修改了草案以接受任何数据.实施(仍然)还没有赶上(见下面的编辑).
因此,在您的情况下,布尔值将转换为字符串.
至于为什么"true" != true,如MDC*中Equal(==)的描述中所写:
如果两个操作数的类型不同,则JavaScript转换操作数,然后应用严格比较.如果操作数是数字或布尔值,操作数将尽可能转换为数字 ; 否则,如果任一操作数是字符串,则另一个操作数将转换为字符串(如果可能).
请注意,该字符串将转换为数字而不是布尔值.由于"true"转换为数字NaN,它将不等于任何东西,因此false返回.
(*:对于实际标准,参见ECMA-262§11.9.3"抽象等式比较算法")
编辑:该setItem接口被恢复只接受在琴弦2011九月一日草案,以配合现有实现的行为,没有任何厂商有兴趣支持存储非字符串.有关详细信息,请参阅https://www.w3.org/Bugs/Public/show_bug.cgi?id=12111.
小智 9
我的解决方案
function tytPreGetBool(pre) {
    return localStorage.getItem(pre) === 'true';
}
我想指出的是,将普通布尔值包装在对象内,然后使用JSON.stringify创建本地存储内容和其他方式JSON.parse来检索它可能会更容易:
let storeMe = {
  myBool: true
}
localStorage.setItem('test', JSON.stringify(storeMe))
let result = JSON.parse(localStorage.getItem('test'))
这与CMS的答案有关。
这是我一直使用的一个小功能来处理此问题的解析部分(该功能将在浏览器实现赶上规范后继续执行Right Thing,因此无需记住以后要更改代码):
function parse(type) {
   return typeof type == 'string' ? JSON.parse(type) : type;
}