Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 本地存储变量被锁定为false_Javascript - Fatal编程技术网

Javascript 本地存储变量被锁定为false

Javascript 本地存储变量被锁定为false,javascript,Javascript,我试图在本地存储中切换真/假变量 console.log("Toggling..."); console.log("Current:" + localStorage.item); console.log("Current is being changed to: " + !localStorage.item); localStorage.item = !localStorage.item; console.log("Current " + localStorage.item); 它的作用是:

我试图在本地存储中切换真/假变量

console.log("Toggling...");
console.log("Current:" + localStorage.item);
console.log("Current is being changed to: " + !localStorage.item);
localStorage.item = !localStorage.item;
console.log("Current " + localStorage.item);
它的作用是:

首轮

 Toggling...
    (index):31 Current:undefined
    (index):32 Current is being changed to: true
    (index):34 Current true
第二轮

Toggling...
(index):31 Current:true
(index):32 Current is being changed to: false
(index):34 Current false
后续运行

Toggling...
(index):31 Current:false
(index):32 Current is being changed to: false
(index):34 Current false

为什么我的变量没有变回true?

您不希望像这样直接在
localStorage
上设置属性。相反,使用
setItem(key,value)
getItem(key)
,和
removietem(key)

示例来自:

以下代码段访问当前域的本地存储对象,并使用Storage.setItem()向其添加数据项

读取localStorage项的语法如下所示:

var cat = localStorage.getItem('myCat');
localStorage.removeItem('myCat');
删除localStorage项的语法如下所示:

var cat = localStorage.getItem('myCat');
localStorage.removeItem('myCat');
这样的话:

console.log("Toggling...");
console.log("Current:" + localStorage.getItem('item'));
console.log("Current is being changed to: " + !localStorage.getItem('item'));
localStorage.setItem('item', !localStorage.getItem('item'));
console.log("Current " + localStorage.getItem('item'));

实际上,您的布尔值在localStorage上存储为字符串

本地存储的类型。项将返回“字符串”

从这一点开始,长度>0的字符串被认为是真实的,即使它的值设置为
“false”

如果使用以下选项,也会发生这种情况:

考虑:

  • 本地存储中删除该项,而不是检查其负布尔值
  • 使用JSON.parse(): localStorage.item=!parse(localStorage.item)

有关其他信息,请选中

您可以使用JSON.parse()将其解析为boolen值:

console.log("Toggling...");
console.log("Current:" + localStorage.item);
console.log("Current is being changed to: " + !JSON.parse(localStorage.item));
localStorage.item = !JSON.parse(localStorage.item);
console.log("Current " + localStorage.item);
console.log("Toggling...");
console.log("Current:" + localStorage.item);
console.log("Current is being changed to: " + !JSON.parse(localStorage.item));
localStorage.item = !JSON.parse(localStorage.item);
console.log("Current " + localStorage.item);