Установка и получение объекта в локальное хранилище с помощью stringify?

Создание объекта под названием автомобиль:

function car(temp){

    this.brand=temp[0];
    this.color=temp[1];
    this.year=temp[2];
}

var temp = ['Skoda', 'Red', '2012'];
car = new car(temp);
  1. Установка объекта и преобразование в строку после чтения из localStorage:

    localStorage.setItem('car',car);
    car = localStorage.getItem('car');
    car = JSON.stringify(car);
    

    car after stringify---> [object Object] в файле:///android_asset/www/...

  2. Stringify объект и установка объекта в localStorage после него: localStorage.setItem('car',JSON.stringify(car)); car = localStorage.getItem('car');

автомобиль после строки ------------------> "{\"марка\":\"Skoda\",\"цвет\":\"красный\",\"год \":\"2012\"}" в файле:///android_asset/www/...

Вопрос 1: Почему имеет значение, в каком порядке вы упорядочиваете объект?

Вопрос 2: Почему я не могу использовать строковый объект следующим образом:

08-21 11:49:14.860: I/Web Console(9642): car after stringify----------------->     {"brand":"Skoda","color":"Red","year":"2012"}

console.log("car.brand----->" +car.brand); car.name----->undefined


person Sami    schedule 21.08.2012    source источник


Ответы (4)


Насколько я понимаю, вы не можете использовать свой строковый объект после того, как он был преобразован в строку, потому что он больше не является объектом. Это строка.

Поэтому, когда вы пытаетесь сделать car.brand в строке, свойство brand отсутствует.

Лично на мой взгляд хорошей практикой было бы заняться.

 function car(temp){
     this.brand=temp[0];
     this.color=temp[1];
     this.year=temp[2];
 }

 var temp = ['Skoda', 'Red', '2012'];
 car = new car(temp);

 localStorage.setItem('car',JSON.stringify(car)); 
 car = localStorage.getItem('car');
 car = JSON.parse(car);

Это означает, что объект автомобиля теперь не строка, а объект.

При этом также записывайте в локальное хранилище с помощью stringify и читайте с помощью синтаксического анализа.

person Lemex    schedule 21.08.2012

Вы не можете хранить объект JavaScript в localStorage, см. этот вопрос.

Так что используйте второй вариант. Сначала упорядочите объект, чтобы сохранить его. А позже возьмите его и разберите на объект javascript.

localStorage.setItem('car',JSON.stringify(car));
carString = localStorage.getItem('car');
car = JSON.parse(carString);
console.log(car.brand); // Skoda
person fredrik    schedule 21.08.2012

Недавно я столкнулся с этой же проблемой. Посмотрите этот скрипт, который я написал.
https://github.com/andresgallo/truStorage

Это позволяет хранить и извлекать объекты внутри локального хранилища. Он будет автоматически возвращать объекты как объекты, если это необходимо. Другое дело, что вы также устанавливаете и получаете элементы во вложенном объекте. Самое приятное во всем этом то, что это крошечный сценарий.

person Andres Gallo    schedule 19.09.2012

Последние браузеры теперь изначально поддерживают localStorage как объекты. Я тестировал это с Chrome v44 и Firefox v34:

localStorage
Storage {debug: "undefined", uid: "3", length: 2} 

typeof localStorage
"object"

Так что с этого момента. С тобой все будет в порядке.

person Jamie Hutber    schedule 21.02.2015
comment
На самом деле, localStorage сам по себе является объектом (это то, что показывает ваш пример выше), но он по-прежнему хранит ваши данные только в виде строк. Возможно, вы думаете о собственном API-интерфейсе хранилища Chrome, chrome.storage, который аналогичен localStorage, но с некоторыми расширениями, в том числе возможностью сохранять объекты в исходном виде: developer.chrome.com/extensions/storage (и, вероятно, в Firefox есть что-то подобное, хотя я не проверял). - person seanTcoyote; 07.12.2016