8

创建一个名为 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 读取后设置对象和字符串化:

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

    字符串化后的汽车----------------> [object Object] at file:///android_asset/www/...

  2. 在它之后将对象字符串化并将对象设置为 localStorage: localStorage.setItem('car',JSON.stringify(car)); car = localStorage.getItem('car');

stringify 后的车----------------> "{\"brand\":\"Skoda\",\"color\":\"Red\",\"year \":\"2012\"}" 在 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"}

console.log("car.brand----->" +car.brand); car.name----->未定义

4

4 回答 4

17

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

因此,当您尝试对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 写入本地存储并使用 parse 读取。

于 2012-08-21T09:01:01.340 回答
10

您不能将 JavaScript 对象存储为 localStorage,请参阅此问题

所以使用你的第二个选项。首先将对象字符串化并存储它。稍后将其拾取并将其解析为 javascript 对象。

localStorage.setItem('car',JSON.stringify(car));
carString = localStorage.getItem('car');
car = JSON.parse(carString);
console.log(car.brand); // Skoda
于 2012-08-21T08:59:55.907 回答
0

我最近也面临同样的问题。看看我写的这个脚本。
https://github.com/andresgallo/truStorage

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

于 2012-09-19T12:31:15.510 回答
0

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

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

typeof localStorage
"object"

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

于 2015-02-21T21:31:36.493 回答