14
0

می‌خوام یه شی جاوا اسکریپت رو تو 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 هست و نه یک باگ یا محدودیت خاص مرورگر.

0
پاسخ کاربردی

با نگاه کردن به مستندات 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));
ارسال پاسخ به سوال بالا

برای ارسال پاسخ باید وارد اکانتت بشی

اگر پاسخت شامل تکه کدی میشه، از منوی ویرایشگر پایین، تکه کدی که نوشتی رو انتخاب کن و بعد از طریق زبان کدی که نوشتی رو انتخاب کن تا کدت داخل بلاک مخصوص زبان خودش قرار بگیره و کدت خواناتر برای بقیه نشون داده بشه

اگه پاسخت رفرنسی داره، لینک رفرنس رو هم بذار تا پاسختت کاملتر و معتبر تر بشه