2017-03-04 2 views
0

Ich Elemente in der localstorage wie folgt aus (mit Strict-Modus) zu speichern:Javascript Localstorage Null Bug

localStorage.setItem(String(index), JSON.stringify([name, score]));

Dann schrieb ich eine Methode zu überprüfen, ob eine neue Partitur größer als die Geretteten ist:

// 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 
} 

Aber ich bekomme diese folgende Ausgabe (nach Beispiel mit name = "name" Speichern und Score = 0):

called

["name", 0]

null

Uncaught TypeError: Cannot read property 1 of null

Wie kann das passieren? Ich überprüfe bereits, ob der Wert null ist, also wie kann dies die erste passieren, wenn die Prüfung localStorage.getItem(String(i)) == null)?

+1

Können Sie die Frage mit einem [mcve] aktualisieren? (Leider muss es eine nicht ausführbare Datei sein, da Stack Snippets keinen lokalen Speicher zulässt, obwohl Sie ein lauffähiges jsFiddle erstellen und darauf verlinken können ** vorausgesetzt ** Sie enthalten auch den gesamten Code in der Frage.) –

+0

@TJCrowder ok Ich werde dies –

+1

für das nächste Mal tun. Keine Notwendigkeit in diesem Fall, wie es passiert ist! :-) –

Antwort

5

Ich vermute, wenn Sie die Devtools des Browsers verwenden, um zu sehen, was im lokalen Speicher ist, finden Sie einen Eintrag für "1" mit dem Wert "null".

, dass die Symptome erklärt, weil

if (localStorage.getItem(String(i)) == null) { 

... ist false wenn localStorage.getItem(String(i)) kehrt "null", aber dann

var indexObject = JSON.parse(localStorage.getItem(String(i))); 

... wird indexObject auf null gesetzt.

+1

genial, einfach repariert :) –

Verwandte Themen