我正在尝试编码:
1.我在localStorage中设置了变量
1.然后,在重新加载页面时,检查该变量是否存在
1.如果存在,则不执行任何操作
1.否则将变量设置为localStorage
但我很纠结于此。
这是我的代码:
function populateStorage() {
var pictureSrc = [ new Logo({"picSrcl":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTMzIiBoZWlna........48L3N2Zz4K"}),];
var lS = JSON.parse(localStorage.getItem("Logos"));
if (lS === true) {
// here is where I am failing not to overwrite Logos variable
} else {
localStorage.setItem("Logos", JSON.stringify(pictureSrc));
}
}
如果Logos变量已经存在,如何完成不覆盖它的任务?
3条答案
按热度按时间vyswwuz21#
在代码中,将
lS
与true
进行比较。因为如果lS
存在于localStorage
中,则它是一个数组;如果null
不存在,则它是一个数组(由于localStorage.getItem()
对于不存在的项返回null
,并且JSON.parse()
将null
解析为null
),这将 * 总是 * 为假。您可以检查它是否为null
。此外,由于您只是检查该项是否存在,因此实际上也不需要解析它;您可以简单地检查
localStorage.getItem()
返回的值是否为null
。以下是应用了这些更改的相关代码:
此外,您没有在条件语句的第一个分支(
if/else
的if
块)中执行任何操作;要清除它,只需反转条件,交换分支,并删除else
分支:另一项可选变更:如果需要,您可以将对
null
的比较更改为对lS
的错误检查:if (lS === null)
到if (!lS)
。* 在这种情况下 *,行为将相同(其他错误值为false
、0
、-0
、0n
、""
、undefined
和NaN
)。总而言之,代码的内容类似于我在下面列出的内容,我还将图片src的创建移到了条件语句中,这样
Logo
只在需要时创建,并立即将其字符串化。注意从
localStorage
加载项目将 * 不会 * 创建Logo
的示例:JSON不能存储这类东西。goqiplq22#
当您解析回存储在LocalStorage中的值(变量pictureSrc的值,它是包含一个对象的数组)时,它不会严格等于true -它不是布尔值。
仅使用
lS
替换lS === true
。rhfm7lfc3#
你的代码有几个问题。
1.你不需要
JSON.parse(localStorage.getItem("Logos"));
这一行,因为如果你得到null,它就会出错。1.你可能想要的是这样的东西: