میخوام یه شی جاوا اسکریپت رو تو localStorage در HTML5 ذخیره کنم، اما به نظر میاد شی من به رشته تبدیل میشه.
من میتونم انواع اولیه جاوا اسکریپت و آرایهها رو با استفاده از localStorage ذخیره و بازیابی کنم، اما شیها به نظر نمیرسه که کار کنن. آیا باید کار کنن؟
اینم کد من:
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);
خروجی کنسول به این شکل است:
typeof testObject: object
testObject properties:
one: 1
two: 2
three: 3
typeof retrievedObject: string
Value of retrievedObject: [object Object]
به نظر میرسه که متد setItem ورودی رو قبل از ذخیره به رشته تبدیل میکنه.
این رفتار رو تو مرورگرهای Safari، Chrome و Firefox دیدم، پس فکر میکنم مشکل از درک من از مشخصات Web Storage در HTML5 هست و نه یک باگ یا محدودیت خاص مرورگر.
با نگاه کردن به مستندات Apple و Mozilla، به نظر میرسه که عملکرد localStorage و sessionStorage محدود به پردازش فقط جفتهای کلید/مقدار از نوع رشته است.
یه راه حل اینه که شی خودتون رو قبل از ذخیره کردن به رشته تبدیل کنید و بعداً وقتی که بازیابی میکنید، اون رو دوباره به شی تبدیل کنید:
var testObject = { 'one': 1, 'two': 2, 'three': 3 };
// Put the object into storage
localStorage.setItem('testObject', JSON.stringify(testObject));
// Retrieve the object from storage
var retrievedObject = localStorage.getItem('testObject');
console.log('retrievedObject: ', JSON.parse(retrievedObject));