你好,我刚开始学习js。
window.localStorage.getItem()
并window.sessionStorage.getItem()
返回null
,尽管如果您在 chrome 中使用应用程序,则存在值 \u200b\u200bare。
let startBtn = document.getElementById("startBtn")
startBtn.onclick = game;
document.getElementById('clearBR').addEventListener('click', ClearBestResult)
document.getElementById('clearBRforAllTime').addEventListener('click', ClearBestResultForAllTime)
let result
function game() {
let count = 0
const nickname = document.getElementById("nickname").value
document.getElementById('click').addEventListener('click', clickCount)
let arr = []
function clickCount() {
count++
arr.push(count)
}
try {
if (nickname === "") throw new Error()
} catch (e) {
alert('nickname is empty')
}
finally {
setTimeout(function () {
result = arr.length
alert(`You clicked ${result} times`)
if (sessionStorage.getItem, (nickname, result) < result || sessionStorage.getItem, (nickname, result) === undefined) {
sessionStorage.clear()
sessionStorage.setItem(nickname, result.toString())
} else if (result > localStorage.getItem, (nickname, result) || localStorage.getItem === undefined) {
localStorage.clear()
localStorage.setItem(nickname, result.toString())
}
count = 0
arr.splice(0, arr.length);
}, 5000);
}
document.getElementById('BRforAllTime').addEventListener('click', bestForAllTimes)
document.getElementById('BR').addEventListener('click', bestResult)
function bestForAllTimes() {
alert(`Best result for the whole time is: ${localStorage.getItem(result)} by ${localStorage.getItem("nickname")}`)
}
function bestResult() {
alert(`Best result is ${window.sessionStorage.getItem(result)}`)
}
console.log(sessionStorage.getItem(result)) // null
console.log(localStorage.getItem(result)) //null
}
function ClearBestResult() {
window.sessionStorage.clear()
alert('Best result is cleared')
}
function ClearBestResultForAllTime() {
localStorage.clear()
alert('Best result for the whole time is cleared')
}
setTimeout
将运行作为第一个参数传递的函数,在第二个参数指定的毫秒数之后,在初始化这部分 JS 代码之后,它会进一步“读取”,console.info()
它们将从 storage 中通过键返回值undefined
。他们不在这里。5 秒后,该功能启动。
在那里,几行之后,我们再次从会话存储中请求值 - 答案应该是
undefined
,因为代码中的任何地方都没有分配,但是您指出了返回null
的内容,比方说..接下来,将返回 的测试
true
,因为其中一个条件通过(第二个 -sessionStorage.getItem(nickname, result) === undefined
)。好的,我们清除了会话,整个会话.. 比方说。
此外,我们在变量上创建一个具有新值的键。
让我们继续进行第二次检查 .. 它会返回
false
, more 和 ...localStorage.getItem,false
这到底是什么?它飞了,因为我没有在代码中看到对本地存储的分配。解决方案二:
补充答案
在误差方面
应该是
.getItem(nickname)
which 反过来会返回一个字符串,要与result
显然具有数字类型的 进行比较,您需要将返回的字符串转换为数字。例如像这样 - 。
Number(sessionStorage.getItem(nickname))
< result
在某些地方您要求
.getItem('nickname')
,但从代码判断您希望通过变量查找键,因此需要删除引号。一般来说,我看不到任何错误,除了我在添加答案之前在上面描述的错误。
有一个缺陷,在我看来。
.clear()
删除存储中所有条目的方法,因此将删除所有玩家的结果。也许最好删除“当前”播放器,通过
.removeItem(nickname)
?