javascript本地存储查找是否存在

javascript本地存储查找是否存在,javascript,local-storage,Javascript,Local Storage,如果本地存储中不存在localscores,我可以使用以下方法创建虚拟高分表: if (localStorage.getItem("localScores") === null) { highscores = [ {user: "Player 1", score: 100}, {user: "Player 2", score: 90}, {user: "Player 3", score: 80}, {user: "Player 4", score: 70}, {user:

如果本地存储中不存在localscores,我可以使用以下方法创建虚拟高分表:

if (localStorage.getItem("localScores") === null) {

highscores = [
  {user: "Player 1", score: 100},
  {user: "Player 2", score: 90},
  {user: "Player 3", score: 80},
  {user: "Player 4", score: 70},
  {user: "Player 5", score: 60},
  {user: "Player 6", score: 50},
  {user: "Player 7", score: 40},
  {user: "Player 8", score: 30},
  {user: "Player 9", score: 20},
  {user: "Player 10", score: 10}
  ];
  localStorage['localScores']=JSON.stringify(highscores);
  console.log("doesn't exist")
}

else{
highscores = JSON.parse(localStorage['localScores']);
console.log("exists")
}
我总是想保持10分,所以我要添加一个分数,其中用户名和总数是输入的名称和获得的分数:

highscores.push({user: username, score: total});                               
highscores.sort(function(a,b){ return b.score - a.score});    
delete highscores[10];
localStorage['localScores']=JSON.stringify(highscores);
console.log(highscores);
一切都很好,直到我重新加载游戏并运行第一个函数,它似乎会向highscores数组添加空值。那么,如果我再加上5个分数,数组中将有3个空值

[对象,对象,对象,对象,对象,对象,对象,对象,对象,对象,对象,空,空,空,空,空]

这让我相信,我评估localscores是否存在的那一行是错误的 (localStorage.getItem(“localScores”)==null)

或者我删除数组中的第11个元素是错误的 删除高分[10]


或者还有一些我没有看到的问题,如果有人知道发生了什么,我非常感谢您的帮助。

当您在数组实例上调用
delete
时,实际上并没有缩短数组,您只需将指定索引处的值替换为
undefined

如果
highscores
的长度应始终不大于10,并且要删除的项目始终是最后一个,则您可以简单地使用
highscores.length=10

您还可以使用
highscores=highscores.slice(0,10),但正如jfriend00指出的,它确实涉及到创建新数组的额外开销


尽管如此,我还是不得不指出,与浏览器编码/解码JSON和从本地存储读取/写入的工作量相比,创建新阵列对性能的影响实际上只是杯水车薪,这是出了名的缓慢。

您可以使用高分。而不是
删除高分[10]

这也适用于修剪
高分
如果(highscores.length>10){highscores.length=10;}
,这不会像
.slice()
那样复制数组。