我在这样的localstorage中保存元素(使用严格模式):
localStorage.setItem(String(index), JSON.stringify([name, score]));
然后我写了一个方法来检查新分数是否大于保存的分数:
// Returns index where to place the score and return -1 if no new highscore
function isHighScore(score) {
console.log("called");
for (var i = 0; i < 3; i++) {
if (localStorage.getItem(String(i)) == null) {
return i; // No highscore yet at this position => new Highscore
}
else{
var indexObject = JSON.parse(localStorage.getItem(String(i)));
console.log(indexObject);
if(indexObject[1] < score){ // Checking if new score is higher than currently at this index
return i; // Returning index if new highscore
}
}
}
return -1; // checked all entries no new highscore
}
但我得到以下输出(在保存示例后使用name =&#34; name&#34; and score = 0):
称为
[&#34; name&#34;,0]
空
未捕获的TypeError:无法读取null
的属性1
这怎么可能发生?我已经检查过该值是否为null
,那么如果检查localStorage.getItem(String(i)) == null)
,该如何通过第一个?
答案 0 :(得分:5)
我怀疑如果您使用浏览器的devtools来查看本地存储中的内容,您会找到值为"1"
的{{1}}条目。
这解释了症状,因为
"null"
如果if (localStorage.getItem(String(i)) == null) {
返回false
,则 ... localStorage.getItem(String(i))
,然后
"null"
...会将var indexObject = JSON.parse(localStorage.getItem(String(i)));
设置为indexObject
。