Ich möchte ein JavaScript-Objekt in HTML5 speichern localStorage
, aber mein Objekt wird anscheinend in eine Zeichenfolge konvertiert.
Ich kann primitive JavaScript-Typen und -Arrays mit speichern und abrufen localStorage
, aber Objekte scheinen nicht zu funktionieren. Sollten Sie?
Hier ist mein Code:
var testObject = { 'one': 1, 'two': 2, 'three': 3 };
console.log('typeof testObject: ' + typeof testObject);
console.log('testObject properties:');
for (var prop in testObject) {
console.log(' ' + prop + ': ' + testObject[prop]);
}
// Put the object into storage
localStorage.setItem('testObject', testObject);
// Retrieve the object from storage
var retrievedObject = localStorage.getItem('testObject');
console.log('typeof retrievedObject: ' + typeof retrievedObject);
console.log('Value of retrievedObject: ' + retrievedObject);
Die Konsolenausgabe ist
typeof testObject: object
testObject properties:
one: 1
two: 2
three: 3
typeof retrievedObject: string
Value of retrievedObject: [object Object]
Für mich sieht es so aus, als würde die setItem
Methode die Eingabe vor dem Speichern in einen String konvertieren.
Ich sehe dieses Verhalten in Safari, Chrome und Firefox, daher gehe ich davon aus, dass es mein Missverständnis der HTML5-Webspeicher- Spezifikation ist, kein browserspezifischer Fehler oder eine Einschränkung.
Ich habe versucht, den in http://www.w3.org/TR/html5/infrastructure.html beschriebenen strukturierten Klonalgorithmus zu verstehen . Ich verstehe nicht ganz, was es sagt, aber vielleicht hat mein Problem damit zu tun, dass die Eigenschaften meines Objekts nicht aufzählbar sind (???)
Gibt es eine einfache Problemumgehung?
Update: Das W3C änderte schließlich seine Meinung über die Struktur-Klon-Spezifikation und beschloss, die Spezifikation an die Implementierungen anzupassen. Siehe https://www.w3.org/Bugs/Public/show_bug.cgi?id=12111 . Diese Frage ist also nicht mehr zu 100% gültig, aber die Antworten könnten dennoch von Interesse sein.