Saya ingin menyimpan objek JavaScript dalam HTML5 localStorage
, tetapi objek saya tampaknya sedang dikonversi ke string.
Saya dapat menyimpan dan mengambil jenis dan array JavaScript primitif menggunakan localStorage
, tetapi objek tampaknya tidak berfungsi. Haruskah mereka
Ini kode saya:
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);
Output konsol adalah
typeof testObject: object
testObject properties:
one: 1
two: 2
three: 3
typeof retrievedObject: string
Value of retrievedObject: [object Object]
Sepertinya saya seperti setItem
metode ini mengkonversi input ke string sebelum menyimpannya.
Saya melihat perilaku ini di Safari, Chrome, dan Firefox, jadi saya menganggap itu kesalahpahaman saya tentang spesifikasi Penyimpanan Web HTML5 , bukan bug atau batasan khusus browser.
Saya sudah mencoba memahami algoritma klon terstruktur yang dijelaskan dalam http://www.w3.org/TR/html5/infrastructure.html . Saya tidak sepenuhnya mengerti apa yang dikatakannya, tapi mungkin masalah saya ada hubungannya dengan properti objek saya yang tidak dapat dihitung (???)
Apakah ada solusi yang mudah?
Pembaruan: W3C akhirnya berubah pikiran tentang spesifikasi terstruktur-klon, dan memutuskan untuk mengubah spesifikasi agar sesuai dengan implementasi. Lihat https://www.w3.org/Bugs/Public/show_bug.cgi?id=12111 . Jadi pertanyaan ini tidak lagi 100% valid, tetapi jawabannya mungkin masih menarik.