Bir JavaScript nesnesini HTML5'te depolamak istiyorum localStorage, ancak nesnem görünüşte bir dizeye dönüştürülüyor.
İlkel JavaScript türlerini ve dizilerini kullanarak saklayabilir ve alabilirim localStorage, ancak nesneler işe yaramıyor. Yapmalılar mı?
İşte benim kod:
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);
Konsol çıkışı
typeof testObject: object
testObject properties:
one: 1
two: 2
three: 3
typeof retrievedObject: string
Value of retrievedObject: [object Object]
Bana setItemyöntem, girdiyi saklamadan önce bir dizeye dönüştürüyor gibi görünüyor .
Safari, Chrome ve Firefox'ta bu davranışı görüyorum, bu yüzden tarayıcıya özgü bir hata veya sınırlama değil , HTML5 Web Depolama spesifikasyonunu yanlış anladığımı varsayıyorum .
Http://www.w3.org/TR/html5/infrastructure.html'de açıklanan yapılandırılmış klon algoritmasını anlamaya çalıştım . Ne dediğini tam olarak anlamıyorum, ama belki de benim sorunum nesnemin özellikleri numaralandırılamaz olmakla ilgili (???)
Kolay bir çözüm var mı?
Güncelleme: W3C nihayetinde yapılandırılmış klon spesifikasyonu hakkındaki fikirlerini değiştirdi ve spesifikasyonu uygulamalara uyacak şekilde değiştirmeye karar verdi. Bkz. Https://www.w3.org/Bugs/Public/show_bug.cgi?id=12111 . Dolayısıyla bu soru artık% 100 geçerli değil, ancak cevaplar hala ilgi çekici olabilir.

