使用 stringify 设置对象并将其获取到本地存储?

Setting and getting object to local storage using stringify?

提问人:Sami 提问时间:8/21/2012 更新时间:6/3/2015 访问量:30105

问:

创建一个名为 car 的对象:

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 读取后设置 object 和 stringify:

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

    car在stringify----------------->[object Object]在 file:///android_asset/www/...

  2. Stringify 对象和 Setting object 到 localStorage:localStorage.setItem('car',JSON.stringify(car)); car = localStorage.getItem('car');

汽车后字符串化----------------->“{\”brand\“:\”Skoda\“,\”color\“:\”Red\“,\”year\“:\”2012\“}” at file:///android_asset/www/...

问题 1:为什么串化对象时的顺序会有所不同?

问题 2:为什么我不能使用这样的字符串化对象:

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

控制台.log(“car.brand----->” +car.brand); car.name----->undefined

JavaScript 对象 本地存储 字符串化

评论


答:

10赞 fredrik 8/21/2012 #1

你不能存储 JavaScript 对象是 localStorage,请参阅此问题

因此,请使用您的第二个选项。首先将对象字符串化,然后存储它。稍后拿起它并将其解析为 javascript 对象。

localStorage.setItem('car',JSON.stringify(car));
carString = localStorage.getItem('car');
car = JSON.parse(carString);
console.log(car.brand); // Skoda
18赞 Lemex 8/21/2012 #2

根据我的理解,一旦字符串化对象被字符串化,你就不能使用它,因为它不再是一个对象。这是一个字符串。

因此,当您尝试在字符串上执行 do 时,没有属性。car.brandbrand

就我个人而言,在我看来,好的做法是这样做。

 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);

这意味着 car 对象现在不是字符串,而是对象。

执行此操作时,还要使用 stringify 写入本地存储,并使用 parse 读取。

0赞 Andres Gallo 9/19/2012 #3

我最近也遇到了同样的问题。看看我写的这个剧本。
https://github.com/andresgallo/truStorage

它允许在本地存储中存储和检索对象。如果需要,它将自动将对象作为对象返回。另一件事是,您还可以在嵌套对象中设置和获取项目。最好的部分是它是一个很小的脚本。

0赞 Jamie Hutber 2/22/2015 #4

最新的浏览器现在支持原生对象。我已经用 Chrome v44 和 Firefox v34 对此进行了测试:localStorage

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

typeof localStorage
"object"

所以从现在开始。你会没事的。

评论

0赞 seanTcoyote 12/8/2016
实际上,localStorage 本身就是一个对象(这就是上面的示例所示),但它仍然只将您的数据存储为字符串。您可能正在考虑 Chrome 自己的存储 API,它与 localStorage 相同,但有一些扩展,包括本地存储对象的能力: developer.chrome.com/extensions/storage(Firefox可能也有类似的东西,尽管我没有检查过。chrome.storage