2017-12-30 2 views
0

Ich versuchte wie this reference, aber es hat nicht funktioniert sowieso.Ich habe Fehler: Kann nicht lesen Property 'Push' von Null

Das ist eine neue Sache für mich, und fing gerade an, Javascript zu lernen.

var getTbl = localStorage.getItem("tableList"); 
var resultTable = []; 
if (getTbl !== undefined && getTbl !== '') { 
    resultTable = JSON.parse(getTbl); 
} 
let newtableHTML = addTable; 
resultTable.push({ 
    table: newtableHTML 
}); 
// save the new resultFolder array 
localStorage.setItem("tableList", JSON.stringify(resultTable)); 

ich versuche, so etwas wie diese, aber kein Glück:

var resultTable = resultTable || []; 

Sorry, wenn ich falsch bin, dass die Art und Weise zu versuchen.

+0

getTbl ist propably Result als null '' if (! GetTbl == undefined && getTbl == '') { Result = JSON.parse (getTbl) einstellen; } '' Überprüfen Sie diesen Teil Ihres Codes –

+1

Wild rate, aber ich denke, der Wert von 'tableList' im lokalen Speicher gespeichert wurde einmal versehentlich auf 'null' gesetzt und dieser Wert wird jetzt in allen Fällen zurückgegeben. Versuchen Sie, Ihren lokalen Speicher von den Entwicklertools zu löschen, und versuchen Sie, den Code erneut auszuführen. –

+2

'localStorage.getItem' gibt null zurück, wenn der Schlüssel nicht existiert. –

Antwort

3

Die Linie

resultTable = JSON.parse(getTbl); 

ersetzt den Inhalt des resultTable Variable mit dem, was JSON.parse zurückkehrt. Scheinbar JSON.parse gibt kein Array (oder eine andere Art von Objekt mit einer push-Methode, aber Arrays sind die einzigen integrierten, die tun).

Meine Vermutung ist, dass es null ist zurückkehrt, weil getItem kehrt null, wenn der Schlüssel im lokalen Speicher nicht existiert, aber sie sind nicht für die Überprüfung. Sie übergeben also null in JSON.parse, es wird gezwungen, String ("null"), und dann als JSON analysiert, was zu ... null.

Da Sie ein Array sind die Speicherung (und Arrays sind nie falsy), würde ich wahrscheinlich tun:

var getTbl = localStorage.getItem("tableList"); 
var resultTable = getTbl ? JSON.parse(getTbl) : []; // <==== 
let newtableHTML = addTable; 
resultTable.push({ 
    table: newtableHTML 
}); 
// save the new resultFolder array 
localStorage.setItem("tableList", JSON.stringify(resultTable)); 

Das testet, ob was getItem gab uns war falsy und, wenn es ist, verwendet [] stattdessen.

Aber es gibt ein Dutzend Variationen zu diesem Thema. Zum Beispiel:

var resultTable = JSON.parse(localStorage.getItem("tableList") || "[]"); // <=== 
let newtableHTML = addTable; 
resultTable.push({ 
    table: newtableHTML 
}); 
// save the new resultFolder array 
localStorage.setItem("tableList", JSON.stringify(resultTable)); 
+0

es ist Arbeit! Danke, Crowder. – Ananda

Verwandte Themen